$ inc仅当新元素添加到集合中时

时间:2015-11-10 14:35:50

标签: javascript mongodb

我有一个等待对象更改的观察者,然后将该作业添加到队列中。只要有东西被添加到集合中,就会触发。

this.upsert({
  count: { $lt: this.config.limit }
}, {
  $setOnInsert: {
    queue: [],
    count: 0
  },
  $addToSet: {
    queue: doc._id
  },
  $inc: { count: 1 }  // herein lie the problem.
});

但是,我遇到的问题是,count会在没有任何技术上添加的情况下增加{<1}}。

只有在单个查询中将元素添加到集合中时才有增量方法吗?

1 个答案:

答案 0 :(得分:3)

您可以使用其他条件字词来更新您的更新,以检查doc._id数组中是否还有queue

this.upsert({
  count: { $lt: this.config.limit },
  queue: { $ne: doc._id }
}, {
  $setOnInsert: {
    queue: [],
    count: 0
  },
  $push: { // Can use $push instead of $addToSet now
    queue: doc._id
  },
  $inc: { count: 1 }
});

它基本上是DIY $addToSet,可以让您获得更多控制权。