如何为mongodb集合中的文档分配计数

时间:2015-04-24 19:45:17

标签: mongodb mongodb-query

我有一个集合,每个文档都有一个单词,它们在整个集合中都是独一无二的。根据我的要求,我执行了一个脚本,每当我插入一个已经存在的单词(文档)时,它就不会被插入。

现在,在这种情况下,每当我尝试插入相同的单词时,我都需要为单词添加计数。任何人都可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

$incupsert:true合并后,您可以非常优雅地完成此任务。

使用upsert:true选项执行更新且没有文档符合您的更新条件时,文档将插入到集合中。

当您使用$inc并且更新的文档中不存在指定的字段时,它将被创建并设置为您递增的值。

所以当你表演时:

db.collection.update(
    { word:"Banana" },
    { $inc: { count: 1 } }, 
    { upsert:true }
);

两种情况是可能的。

  • 当存在{ word: "Banana", count: 42 }这样的文档时,它会更改为{ word: "Banana", count: 43 }
  • 如果不存在包含word: "Banana"的文档,则会在集合中添加文档{ word: "Banana", count: 1 }

顺便说一句:当遇到性能问题时,您应该可以通过在word上创建唯一索引来加快速度。考虑到你有一个永远不是数组的单个字段,并且你总是通过完全相等来查询,你可以使用hashed index,这对于更大的集合来说非常快。