Documentation If this document doesn't answer your questions, see the source of Collection or Cursor, or the documentation at MongoDB for query and update formats. FindThe find method is actually a factory method to create Cursor objects. A Cursor lazily uses the connection the first time you call nextObject, each, or toArray. The basic operation on a cursor is the nextObject method that fetches the next matching document from the database. The convenience methods each and toArray call nextObject until the cursor is exhausted. Signatures: [JavaScript] 纯文本查看 复制代码 var cursor = collection.find(query, [fields], options);
cursor.sort(fields).limit(n).skip(m).
cursor.nextObject(function(err, doc) {});
cursor.each(function(err, doc) {});
cursor.toArray(function(err, docs) {});
cursor.rewind() // reset the cursor to its initial state.
Useful chainable methods of cursor. These can optionally be options of find instead of method calls: [C#] 纯文本查看 复制代码 .limit(n).skip(m) to control paging.
.sort(fields) Order by the given fields. There are several equivalent syntaxes:
.sort({field1: -1, field2: 1}) descending by field1, then ascending by field2.
.sort([['field1', 'desc'], ['field2', 'asc']]) same as above
.sort([['field1', 'desc'], 'field2']) same as above
.sort('field1') ascending by field1
Other options of find: [C#] 纯文本查看 复制代码 fields the fields to fetch (to avoid transferring the entire document)
tailable if true, makes the cursor tailable.
batchSize The number of the subset of results to request the database to return for every request. This should initially be greater than 1 otherwise the database will automatically close the cursor. The batch size can be set to 1 with batchSize(n, function(err){}) after performing the initial query to the database.
hint See Optimization: hint.
explain turns this into an explain query. You can also call explain() on any cursor to fetch the explanation.
snapshot prevents documents that are updated while the query is active from being returned multiple times. See more details about query snapshots.
timeout if false, asks MongoDb not to time out this cursor after an inactivity period.
For information on how to create queries, see the MongoDB section on querying. [JavaScript] 纯文本查看 复制代码 var MongoClient = require('mongodb').MongoClient
, format = require('util').format;
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
if(err) throw err;
var collection = db
.collection('test')
.find({})
.limit(10)
.toArray(function(err, docs) {
console.dir(docs);
});
}); InsertSignature: [JavaScript] 纯文本查看 复制代码 collection.insert(docs, options, [callback]);
where docs can be a single document or an array of documents. Useful options: [C#] 纯文本查看 复制代码 safe:true Should always set if you have a callback.
See also: MongoDB docs for insert. [JavaScript] 纯文本查看 复制代码 var MongoClient = require('mongodb').MongoClient
, format = require('util').format;
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
if(err) throw err;
db.collection('test').insert({hello: 'world'}, {w:1}, function(err, objects) {
if (err) console.warn(err.message);
if (err && err.message.indexOf('E11000 ') !== -1) {
// this _id was already inserted in the database
}
});
});
Note that there's no reason to pass a callback to the insert or update commands unless you use the safe:true option. If you don't specify safe:true, then your callback will be called immediately. Update: update and insert (upsert)The update operation will update the first document that matches your query (or all documents that match if you use multi:true). If safe:true, upsert is not set, and no documents match, your callback will return 0 documents updated. See the MongoDB docs for the modifier ($inc, $set, $push, etc.) formats. Signature: [JavaScript] 纯文本查看 复制代码 collection.update(criteria, objNew, options, [callback]);
Useful options: [C#] 纯文本查看 复制代码 safe:true Should always set if you have a callback.
multi:true If set, all matching documents are updated, not just the first.
upsert:true Atomically inserts the document if no documents matched.
Example for update: [JavaScript] 纯文本查看 复制代码 var MongoClient = require('mongodb').MongoClient
, format = require('util').format;
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
if(err) throw err;
db.collection('test').update({hi: 'here'}, {$set: {hi: 'there'}}, {w:1}, function(err) {
if (err) console.warn(err.message);
else console.log('successfully updated');
});
}); Find and modifyfindAndModify is like update, but it also gives the updated document to your callback. But there are a few key differences between findAndModify and update: - The signatures differ.
- You can only findAndModify a single item, not multiple items.
Signature: [JavaScript] 纯文本查看 复制代码 collection.findAndModify(query, sort, update, options, callback)
The sort parameter is used to specify which object to operate on, if more than one document matches. It takes the same format as the cursor sort (see Connection.find above). See the MongoDB docs for findAndModify for more details. Useful options: [C#] 纯文本查看 复制代码 remove:true set to a true to remove the object before returning
new:true set to true if you want to return the modified object rather than the original. Ignored for remove.
upsert:true Atomically inserts the document if no documents matched.
Example for findAndModify: [JavaScript] 纯文本查看 复制代码 var MongoClient = require('mongodb').MongoClient
, format = require('util').format;
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
if(err) throw err;
db.collection('test').findAndModify({hello: 'world'}, [['_id','asc']], {$set: {hi: 'there'}}, {}, function(err, object) {
if (err) console.warn(err.message);
else console.dir(object); // undefined if no matching object exists.
});
});
|