mongoclient findandmodify使用

来源:互联网 发布:nba奇葩数据假 编辑:程序博客网 时间:2024/06/05 23:59

工作中临时使用到,网上找了许多资料,按例传参一直报错,无奈看了下原码,这里记录下:

mongodb version:2.6.1

nodejs mongodb version:1.4.39

以下为相应源码

var findAndModify = function findAndModify (query, sort, doc, options, callback) {  var args = Array.prototype.slice.call(arguments, 1);  callback = args.pop();  sort = args.length ? args.shift() || [] : [];  doc = args.length ? args.shift() : null;  options = args.length ? args.shift() || {} : {};  var self = this;  var queryObject = {     'findandmodify': this.collectionName   , 'query': query  };  sort = utils.formattedOrderClause(sort);  if (sort) {    queryObject.sort = sort;  }  queryObject.new = options.new ? 1 : 0;  queryObject.remove = options.remove ? 1 : 0;  queryObject.upsert = options.upsert ? 1 : 0;  if (options.fields) {    queryObject.fields = options.fields;  }  if (doc && !options.remove) {    queryObject.update = doc;  }  // Checkout a write connection  options.connection = self.db.serverConfig.checkoutWriter();    if(options.connection instanceof Error && options.connection.code == -5000) return callback(options.connection);  // Either use override on the function, or go back to default on either the collection  // level or db  if(options['serializeFunctions'] != null) {    options['serializeFunctions'] = options['serializeFunctions'];  } else {    options['serializeFunctions'] = this.serializeFunctions;  }  // No check on the documents  options.checkKeys = false;  // Execute the command  this.db.command(queryObject    , options, function(err, result) {      if(err) return callback(err, null);      return callback(null, result.value, result);  });}


0 0
原创粉丝点击