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

How to assign count to a document in a mongodb collection

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

现在,在这种情况下,每当我尝试插入相同的词时,我都需要对词进行计数。谁能帮我解决这个问题。

你可以通过组合 $inc with upsert: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 ,它对于更大的集合来说速度非常快。