NodeJS 和 MongoDB FindAndModify() 需要删除或更新
Posted
技术标签:
【中文标题】NodeJS 和 MongoDB FindAndModify() 需要删除或更新【英文标题】:NodeJS and MongoDB FindAndModify() need remove or update 【发布时间】:2014-08-11 02:50:12 【问题描述】:我正在尝试使用 nodejS 在 mongodb 中执行 findAndModify,这是我的代码:
var nextBill = function (db, success, log)
var collection = db.collection('autoincrements');
log.debug('autoIncrementRepository', 'nextBill');
var result = collection.findAndModify(
query: _id: 'auto' ,
update: $inc: bill: 1 ,
new: true
);
success(result.bill);
;
编辑:
尝试回调
collection.findAndModify(
query: _id: 'auto' ,
update: $inc: bill: 1 ,
new: true
, function (e, result)
success(result.budget);
);
但是给我错误需要删除或更新..但我正在这样做..
【问题讨论】:
您使用的是哪个驱动程序? MongoDB节点原生驱动需要回调,mongoose、mongoose等也需要回调。 本机驱动程序,但使用回调我得到同样的错误:。我将使用我的实际代码编辑我的 awnser。 【参考方案1】:试试这个它在 nodejs 中对我有用
users.findAndModify(
"_id": userid,"password":pwd,
[['_id', 'asc']],
"$set":"password":npwd,
"upsert":false
,function(err,result)
//enter code here
)
【讨论】:
【参考方案2】:节点原生驱动实现中的.findAndModify()
方法与mongo shell实现不同。要进行上述更新:
collection.findAndModify(
"_id": "auto" ,
"$inc": "bill": 1 ,
function(err,doc)
// work here
);
有点奇怪地删除了您在选项中指定的内容,因此同样会“删除”匹配的文档:
collection.findAndModify(
"_id": "auto" ,
"$inc": "bill": 1 ,
"remove": true ,
function(err,doc)
// work here
);
主要区别在于您没有为操作命名“关键”部分。
【讨论】:
感谢这项工作,但为什么它们与外壳规范/文档所说的不同?? @Aodh shell 规范不是驱动程序实现的规范。您正在阅读的文档是针对 mongo 本身的,而不是针对驱动程序的。阅读此处的驱动程序文档:mongodb.github.io/node-mongodb-native 嗨,我仍然收到错误,这是我的代码 db.collection(nextIDCollection).findAndModify("_id":1,$inc: "nextID":1 ,function (错误,文档));我找不到代码有什么问题。【参考方案3】:Hi I have followed this and it worked perfectly.
db.collection('test').findAndModify(
hello: 'world', // query
[['_id','asc']], // sort order
$set: hi: 'there', // replacement, replaces only the field "hi"
, // options
function(err, object)
if (err)
console.warn(err.message); // returns error if no matching object found
else
console.dir(object);
);
);
【讨论】:
【参考方案4】:http://mongodb.github.io/node-mongodb-native/2.0/api/Collection.html#findAndModify
上面的文档指定第二个参数是排序顺序,用于在多个文档匹配查询时选择使用哪个文档。仅提供两个参数将导致“需要删除或更新”错误消息。
collection('MyCollection').findAndModify(
_id: "auto" ,
[],
$inc: "bill": 1 ,
upsert: true, new: true ,
function(err,doc)
// work here
);
【讨论】:
以上是关于NodeJS 和 MongoDB FindAndModify() 需要删除或更新的主要内容,如果未能解决你的问题,请参考以下文章
使用 Angular 2 服务、mongoDB 和 NodeJs 编辑对象
使用mongodb在nodejs中使用锁定/事务读取和插入文档