我有以下架构:
friends: [{
user: { type : mongoose.Schema.Types.ObjectId, ref : 'User' },
read: Boolean,
accepted: Boolean
}]
我想更新阅读字段。我有以下查询:
User.update({_id: user._id,
"friends.$._id": {$in: data.friends}
},
{ $set: { "friends.$.read": true }},
false,
true,
function(err, obj)
console.log(obj);
}
);
这适用于一个文档但是当我有两个或更多文档时,只有第一个文档发生更改。
例如:
[{
user: 'user1',
read: true,
accepted: false
},
{
user: 'user2',
read: false,
accepted: false
}]
仅更改了user1。
答案 0 :(得分:0)
默认情况下,update
中的MongoDB
命令仅更新一个文档,第一个文档与您的查询匹配。如果要更新所有文档,则必须通过传递选项{ multi: true }
来指定它。
我不是Node.js
专家,但在您的示例中,我非常确定您将查询的第一个false
更改为true
(根据此链接: http://mongodb.github.io/node-mongodb-native/markdown-docs/insert.html,是multi
选项)它将起作用。像这样:
User.update({_id: user._id,
"friends.$._id": {$in: data.friends}
},
{ $set: { "friends.$.read": true }},
true,
true,
function(err, obj)
console.log(obj);
}
);
否则,您可以尝试直接在查询中传递multi
选项:
User.update({_id: user._id,
"friends.$._id": {$in: data.friends}
},
{ $set: { "friends.$.read": true }},
{ multi: true },
function(err, obj)
console.log(obj);
}
);
我希望这会对你有所帮助。