如何为 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 ,它对于更大的集合来说速度非常快。
我有一个集合,其中每个文档都有一个词,并且它们在整个集合中都是唯一的。根据我的要求,我执行了一个脚本,这样每当我插入一个已经存在的单词(文档)时,它就不会被插入。
现在,在这种情况下,每当我尝试插入相同的词时,我都需要对词进行计数。谁能帮我解决这个问题。
你可以通过组合 $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 ,它对于更大的集合来说速度非常快。