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

Javascript $inc仅当新元素添加到集合时,javascript,mongodb,Javascript,Mongodb,我有一个观察器,它等待对象更改,然后将该作业添加到队列中。这将在向集合中添加内容时触发 this.upsert({ count: { $lt: this.config.limit } }, { $setOnInsert: { queue: [], count: 0 }, $addToSet: { queue: doc._id }, $inc: { count: 1 } // herein lie the problem. }); 然而,我面临一

我有一个观察器,它等待对象更改,然后将该作业添加到队列中。这将在向集合中添加内容时触发

this.upsert({
  count: { $lt: this.config.limit }
}, {
  $setOnInsert: {
    queue: [],
    count: 0
  },
  $addToSet: {
    queue: doc._id
  },
  $inc: { count: 1 }  // herein lie the problem.
});
然而,我面临一个问题,
count
将在不向集合添加任何技术内容的情况下增加


只有在一次查询中将一个元素添加到集合中时,才有增加的方法吗?

您可以通过使用另一个条件项对更新进行选通来检查
doc.\u id
是否不在
队列
数组中

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
,可以让您获得更多的控制权。

这非常有用!谢谢你,做得很好!附加条件项是一个好主意。实际上,这个解决方案只有一个问题:如果我尝试推送相同的id,它将生成一个新文档。有没有办法让它只更新它的条目?