我正在创建一个MEAN堆栈来做列表,并需要有关以下Mongoose语法的帮助。
我正在尝试将todos数组的已完成字段更新为true。通过研究,我能够使用Mongoose模型findOneAndUpdate更新我的子文档。
但是,我也在尝试学习如何使用findByIdAndUpdate。我似乎无法让它发挥作用。我哪里错了?
我的带有嵌套子文档的Mongoose文档:
{
//this is my userID
"_id": ObjectId("5b21cbdeebe2b414906b2b31"),
"username": "john",
"todos": [{
// this is my id
"_id": ObjectId("5b21cbdeebe2b414906b2b32"),
"item": "testing",
"completed": false
}, {
// this is my id
"_id": ObjectId("5b22dd570f15b72e949591f6"),
"item": "adding new",
"completed": false
}]
}
My Mongoose功能:
module.exports.markItemCompleted = function(id, callback) {
Item.findByIdAndUpdate(id, { $set: { completed: true }}, callback);
}
答案 0 :(得分:1)
您需要使用$[] positional运算符才能更新数组中的每个元素
module.exports.markItemCompleted = function(id, callback) {
Item.update(
{ _id: id },
{ $set: { 'todos.$[].completed': true }}, callback
);
}
注意:您应该 mongodb版本3.6