只有当一个新元素被添加到一个集合中时,才使用$inc

$inc only if a new element was added to a set

本文关键字:一个 集合 inc 新元素 元素 添加      更新时间:2023-09-26

我有一个观察器,它等待对象更改,然后将该作业添加到队列中。每当有东西添加到集合中时,就会触发此项。

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

然而,我面临的问题是,count将在没有任何技术上的添加到集合的情况下递增。

是否有一种方法可以仅在单个查询中将元素添加到集合时进行增量?

您可以通过用另一个条件项门控更新来检查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 }
});

它基本上是一个自己动手做的$addToSet,给你更多的控制。