$ inc没有工作mongoDB

时间:2018-04-02 19:19:13

标签: mongodb mongodb-query

我有像这样的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);
    });

1 个答案:

答案 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" } } ]  })