查找并更新数组中列出的许多文档
Find and update many documents listed in an array
我试图通过查找数组中列出的所有匹配文档来更新我的数据库,然后更新列出的多个文档,我能够使用 findOne()
更新单个文档但是当我使用 find()
查找数组中匹配的所有文档。它不会更新。有什么解决办法吗?
示例文档:
_id:5c5ef16221a4961b68e64d98
serial_code:"one"
status:"available"
_id:5c5ef17541a4961b68e64d98
serial_code:"two"
status:"available"
我的代码:
Bloodstock.find({ serial_code : { $in : ['one','two','three'] } }, function(bloodstock) {
bloodstock.status = 'not available';
bloodstock.save(function(err) {
if (err) {
console.log(err);
} else {
console.log('success');
}
});
});
给我错误:
TypeError: bloodstock.save is not a function
Mongoose 的回调通常有两个参数,第一个参数代表错误,看一下 here。因此,您的代码可能如下所示:
Bloodstock.find({ serial_code : { $in : ['one','two','three'] } }, function(error, bloodstockDocs) {
if(error) return;
for(let bloodstock of bloodstockDocs) {
bloodstock.status = 'not available';
bloodstock.save(function(err) {
if (err) {
console.log(err);
} else {
console.log('success');
}
});
}
});
编辑:find
returns 一个集合,因此您需要使用 for
循环遍历这些文档。
改用更新查询
Bloodstock.update(
{ serial_code : { $in : ['one','two','three'] } },
{ $set: { status: 'not available' }},
{ multi: true },
function (err, result){
console.log(result)
}
)
您可以使用带有选项 multi: true 的更新方法来更新与您的查询匹配的多个文档。
Bloodstock.update(
{ serial_code : { $in : ['one','two','three'] } },
{ $set: { status: 'not available' }},
{ multi: true },
function (err, result){
console.log(result)
}
);
您可以在此处查看有关选项的更多详细信息:https://docs.mongodb.com/manual/reference/method/db.collection.update/
我试图通过查找数组中列出的所有匹配文档来更新我的数据库,然后更新列出的多个文档,我能够使用 findOne()
更新单个文档但是当我使用 find()
查找数组中匹配的所有文档。它不会更新。有什么解决办法吗?
示例文档:
_id:5c5ef16221a4961b68e64d98
serial_code:"one"
status:"available"
_id:5c5ef17541a4961b68e64d98
serial_code:"two"
status:"available"
我的代码:
Bloodstock.find({ serial_code : { $in : ['one','two','three'] } }, function(bloodstock) {
bloodstock.status = 'not available';
bloodstock.save(function(err) {
if (err) {
console.log(err);
} else {
console.log('success');
}
});
});
给我错误:
TypeError: bloodstock.save is not a function
Mongoose 的回调通常有两个参数,第一个参数代表错误,看一下 here。因此,您的代码可能如下所示:
Bloodstock.find({ serial_code : { $in : ['one','two','three'] } }, function(error, bloodstockDocs) {
if(error) return;
for(let bloodstock of bloodstockDocs) {
bloodstock.status = 'not available';
bloodstock.save(function(err) {
if (err) {
console.log(err);
} else {
console.log('success');
}
});
}
});
编辑:find
returns 一个集合,因此您需要使用 for
循环遍历这些文档。
改用更新查询
Bloodstock.update(
{ serial_code : { $in : ['one','two','three'] } },
{ $set: { status: 'not available' }},
{ multi: true },
function (err, result){
console.log(result)
}
)
您可以使用带有选项 multi: true 的更新方法来更新与您的查询匹配的多个文档。
Bloodstock.update(
{ serial_code : { $in : ['one','two','three'] } },
{ $set: { status: 'not available' }},
{ multi: true },
function (err, result){
console.log(result)
}
);
您可以在此处查看有关选项的更多详细信息:https://docs.mongodb.com/manual/reference/method/db.collection.update/