我将mongoDB(3.4)与node.js驱动程序一起使用,并且我试图更新" items_collection"中包含的所有文档中的字段。我尝试了几种不同的方法,但我似乎无法找到正确更新所有文档的解决方案。以下是我目前获得的代码:
var cursor = db.collection('items_collection').find();
cursor.on("end", function() {
console.log("Finished. Closing db...");
db.close();
});
cursor.on("err", function() {
console.dir("Error on:" + err);
throw err;
});
cursor.on("data", function(doc) {
cursor.pause();
var newTitle = getTitleFromDescription(doc.description);
db.collection('items_collection').update({_id: doc._id}, {$set:{title: newTitle}}, {multi:true});
cursor.resume();
});
这对我来说似乎是合理的,但它只是第一个将其标题更新为" test_title"的文档。我一定错过了一些明显的东西吗?
感谢。
答案 0 :(得分:2)
使用更新代替保存,并将multi : true
用于多个文档udpates:
db.collectionname.update( {}, { $set:{ title : "newvalue" } }, { multi : true } );
默认情况下,MongoDB中的所有更新都是单数。您必须添加multi : true
cursor.on("data", function(doc) {
cursor.pause();
var newTitle = getTitleFromDescription(doc.description);
console.log(doc._id);
console.log(newTitle);
db.collection('items_collection').update({_id: doc._id}, {$set:{title: newTitle}}, {multi:true}).then(function(response){
console.log(response);
console.log('++++++++++++++++++');
cursor.resume();
});
});
答案 1 :(得分:0)
您可以通过多次更新轻松完成此操作。假设您要更新集合中的每个文档,您可以这样做:
db.collection("items_collection").update({},{$set:{title: "test_title"},{multi:true} );
文档清楚地解释了here。
另请注意,您必须更新多个更新的运算符表达式。如果您要更新单个文档,update
方法的第二个参数可以是field:value
的普通对象,但多重更新必须使用update operator,如$set
在上面的例子中。