我需要更新一个集合中的一些文档,并将更新文档的_id
数组发送到另一个集合。
由于update()
会返回更新项的号而不是其ID ,我已经拿出以下内容来获取数组:
var docsUpdated = [];
var cursor = myCollection.find(<myQuery>);
cursor.forEach(function(doc) {
myCollection.update({_id : doc._id}, <myUpdate>, function(error, response){
docsUpdated.push(doc._id);
});
});
或者我能做到:
var docsUpdated = myCollection.distinct("_id", <myQuery>);
myCollection.update(<myQuery>, <myUpdate>, {multi : true});
我猜第二个版本会更快,因为它只调用数据库两次。但两者看起来都非常低效 - 有没有其他方法可以在没有多个数据库调用的情况下执行此操作?还是我过于复杂的事情?
答案 0 :(得分:0)
我认为你需要游标操作符“.aggregate()”
db.orders.aggregate([
{ $group: { _id: "$_id"} }
])
这些行中的某些内容返回集合中所有id的结果