Cursor trong MongoDB là một khái niệm quan trọng trong việc truy xuất và xử lý dữ liệu từ cơ sở dữ liệu. Nó đóng vai trò cầu nối giữa ứng dụng và dữ liệu trong MongoDB và có tầm quan trọng lớn trong việc quản lý và truy vấn dữ liệu theo các yêu cầu cụ thể. Hãy cùng W3seo tìm hiểu về những phương thức này.
cursor.addOption(flag)
Phương thức thêm cờ giao thức dây “OP_QUERY”. Nó được thêm vào để thay đổi hành vi của các truy vấn như cờ có thể chỉnh sửa.
Ví dụ
var t = db.myCappedCollection; var cursor = t.find(). addOption(DBQuery.Option.tailable) .addOption(DBQuery.Option.awaitData)
Ví dụ trên thêm cờ có thể điều chỉnh và cờ awaitData để đảm bảo rằng truy vấn trả về một Cursor có thể điều chỉnh. Một Cursor sẽ được tạo bằng phương pháp này chờ vài giây sau khi trả về tập hợp kết quả đầy đủ. Để trong quá trình truy vấn, nó có thể lấy và trả về dữ liệu bổ sung.
Cursor.batchSize(size)
Kết quả lô từ đối tượng MongoDB trả về số lượng Document được chỉ định bằng phương pháp kích thước lô. Trong nhiều trường hợp, nếu chúng tôi sửa đổi kích thước lô, nó sẽ không ảnh hưởng đến người dùng hoặc ứng dụng.
Ví dụ
db.inventory.find().batchSize(10)
cursor.close()
Phương thức được sử dụng để đóng Cursor và giải phóng tài nguyên máy chủ liên quan theo lệnh của phương thức. Cursor sẽ tự động bị đóng bởi máy chủ không có kết quả nào còn lại hoặc nó đã không hoạt động trong một khoảng thời gian nhất định.
Ví dụ
db.collection.find(<query>).close()
cursor.collation(<collation document>)
Phương thức MongoDB collation () chỉ định đối chiếu cho Cursor được trả về bởi db.collection.find ().
Các Document đối chiếu được chấp nhận theo phương pháp đóng:
{ locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> }
Ví dụ:
db.javaTpoint.find( { x: "a" } ).collation( { locale: "en_US", strength: 1 } )
Đầu ra:
cursor.forEach(function)
Hàm JavaScript sẽ được áp dụng cho tất cả các Document bằng Cursor sử dụng phương thức forEach.
Cú pháp:
db.collection.find().forEach(<function>)
Ví dụ:
Phương thức forEach () được gọi trên Cursor được trả về bởi phương thức find () để hiển thị tên của tất cả người dùng trong Collection:
db.users.find().forEach( function(testDB) { print( "user: " + editors.name ); } );
cursor.hint(index)
Phương thức này được gọi trong quá trình truy vấn để ghi đè lựa chọn mặc định của MongoDB về chỉ mục và quá trình tối ưu hóa truy vấn.
Ví dụ:
Tất cả Document trong Collection của người dùng sử dụng chỉ mục trên trường tuổi sẽ được trả về bằng cách sử dụng truy vấn bên dưới.
db.users.find().hint( { age: 1 } )
cursor.limit()
Phương thức này được sử dụng để chỉ định số lượng Document tối đa mà Cursor trả về. Nó sẽ được sử dụng trong Cursor và có thể so sánh với câu lệnh LIMIT trong cơ sở dữ liệu SQL.
Ví dụ:
db.collection.find(<query>).limit(<number>)
cursor.map(function)
Phương thức bản đồ được sử dụng bởi Document được Cursor truy cập và cũng thu thập các giá trị trả về từ ứng dụng gần nhất vào một mảng.
Ví dụ:
db.users.find (). map (function (u) {return u.name;});
cursor.max()
Phương thức max được sử dụng để hạn chế kết quả của phương thức find (). Max (). MongoDB chỉ định giới hạn trên dành riêng cho một chỉ mục cụ thể, cung cấp một cách để chỉ định giới hạn trên cho các chỉ mục khóa ghép.
Ví dụ
Tạo các chỉ mục sau cho Collection:
db.products.createIndexes( [ { "item" : 1, "type" : 1 }, { "item" : 1, "type" : -1 }, { "price" : 1 }])
Nếu bạn đang sử dụng thứ tự của chỉ mục {item: 1, type: 1}, thì max () hạn chế truy vấn của các Document nằm dưới giới hạn của mục bằng Mango và nhập bằng
db.products.find (). max ({item: 'Mango', type: 'Alfonso'}) .hint ({item: 1, type: 1})
cursor.min()
Để giới hạn kết quả của find (). min () MongoDB chỉ định giới hạn dưới cho một chỉ mục cụ thể theo thứ tự. Phương pháp này cung cấp một cách để xác định các giới hạn thấp hơn trên các chỉ mục khóa ghép.
Cú pháp:
{field1: <min value>, field2: <min value2>, fieldN: <min valueN>}
Ví dụ:
Trước tiên, hãy tạo một Collection mẫu có tên là siêu kho chứa các Document sau:
db.products.insertMany([ { "_id" : 1, "item" : "Java", "type" : "book", "price" : NumberDecimal("1.09") }, { "_id" : 2, "item" : "MongoDB", "type" : "book", "price" : NumberDecimal("1.9") }, { "_id" : 3, "item" : "Homefoil","type" : "Utensil", "price" : NumberDecimal("1.2") }, { "_id" : 4, "item" : "Handwash", "type": "Utensil", "price" : NumberDecimal("1.29") }, { "_id" : 5, "item" : "Rice", "type" : "Grocery", "price" : NumberDecimal("1.59") }, { "_id" : 6, "item" : "Mango", "type" : "Fruit", "price" : NumberDecimal("1.29") }, { "_id" : 7, "item" : "Orange", "type" : "Fruit", "price" : NumberDecimal("2.99") }, { "_id" : 9, "item" : "Apple", "type" : "Fruit", "price" : NumberDecimal("1.99") }, { "_id" : 8, "item" : "Potato", "type" : "vegetable", "price" : NumberDecimal("0.99") }, { "_id" : 10, "item" : "Onion", "type" : "vegetable", "price" : NumberDecimal("1.39") } ])
Bây giờ, hãy tạo các chỉ mục cho Collection:
Phương thức min () giới hạn truy vấn đối với các Document bằng cách sử dụng thứ tự của chỉ mục {item: 1, type: 1}.
db.products.find (). min ({item: 'Java', type: 'book'}) .hint ({item: 1, type: 1})
cursor.tailable()
Phương thức có thể điều chỉnh đánh dấu Cursor là có thể điều chỉnh được. Nó hoạt động như một máy quét trên một Collection có giới hạn. Ngay cả sau khi đến nút cuối cùng của Collection, nó vẫn mở. Ứng dụng của phương pháp sẽ liên tục chạy khi dữ liệu mới được chèn vào bên trong Collection.
Cú pháp:
cursor.tailable ({awaitData: <boolean>})
Nếu cờ awaitdata được đặt thành true, thì MongoDB sẽ chặn chuỗi truy vấn trong một khoảng thời gian khi Cursor đạt đến phần cuối của Collection giới hạn để chờ dữ liệu mới đến. Luồng bị chặn được báo hiệu để đánh thức và trả lại lô tiếp theo cho máy khách khi dữ liệu mới được chèn vào Collection giới hạn.
cursor.toArray()
Phương thức trả về một mảng có tất cả các Document thuộc về Cursor. Nó tải tất cả các Document vào RAM và làm cạn kiệt Cursor bằng cách lặp lại Cursor hoàn toàn.
var allProductsArray = db.products.find().toArray(); if (allProductsArray.length > 0) { printjson (allProductsArray[0]); }