我有一个集合,每个文档都有一个单词,它们在整个集合中都是独一无二的。根据我的要求,我执行了一个脚本,每当我插入一个已经存在的单词(文档)时,它就不会被插入。
现在,在这种情况下,每当我尝试插入相同的单词时,我都需要为单词添加计数。任何人都可以帮我解决这个问题。
答案 0 :(得分:1)
将$inc与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,这对于更大的集合来说非常快。