我有像这样的MongoDB数据
{
_id: "5aa8f087e1eee70004a99e1d"
users: [{facebookId: "-1", unread: 0},{facebookId: "323232321", unread: 1}]
}
我想增加users.unread,其中facebookId不在" -1"
我试过了这个查询
chat.update({ "_id": { "$in": chatId }, "users.facebookId": { "$ne": "-1" } },{"$inc": { "users.$.unread": 1 } }, { multi: true, upsert: true }, function(err, data) {
if (err) throw err;
console.log(data);
});
答案 0 :(得分:3)
来自MongoDB docs:
如果查询使用否定运算符(例如$ ne,$ not或$ nin)匹配数组,则无法使用位置运算符更新此数组中的值。
但是,如果查询的否定部分位于$ elemMatch表达式内,则可以使用位置运算符更新此字段
如果要增加第一个匹配元素,则下面的代码应该有效:
db.chat.update({ "_id":"5aa8f087e1eee70004a99e1d", "users": { $elemMatch: { "facebookId": { "$ne": "-1" } }}},{"$inc": { "users.$.unread": 1 }})
否则你可以在MongoDB 3.6中使用数组过滤器
db.col.update({ "_id":"5aa8f087e1eee70004a99e1d" }, { "$inc" : { "users.$[cond].unread" : 1 } }, { arrayFilters: [ { "cond.facebookId": { $ne: "-1" } } ] })