$ inc仅在$ addToSet成功时

时间:2016-03-02 15:58:29

标签: mongodb meteor

在我的项目中,我想增加我的"数字"仅当我的$ addToSet成功时才输入字段。有主题,每个主题都有用户。当用户加入主题时,我会在"用户"中添加他的ID。数组和我增加主题中的用户数。目前,我的解决方案增加了字段编号,即使用户已经在用户"数组"。

<?php dynamic_sidebar('ylgsubscriber');?>

我在Google上尝试了很多东西,但我总是出错。我该怎么做呢?

1 个答案:

答案 0 :(得分:3)

您可以对此过程使用两个写入操作,因为在单个原子更新操作中无法实现。

如果查询满足用户不存在的给定条件,则第一次更新操作会递增计数器,然后下一次更新操作会使用 $addToSet 将用户添加到阵列:< / p>

var query = {
    _id: roomId,
    users: {"$ne": this.userId}
};
Topics.update(query, { $inc: { number: 1 } });
Topics.update(roomId, { $addToSet: { users: this.userId });

这可能会因为两次数据库调用而效率稍低,但如果这是一个可能会影响您的问题 应用程序性能然后您可以使用Topics.rawCollection()为Mongo的 findAndModify() 编写自己的流星包装器。