[英]How to efficiently bulk insert and update mongodb document values from an array?
我有一个标签集合,其中包含以下结构的文档:
{
word:"movie", //tag word
count:1 //count of times tag word has been used
}
我得到了一个需要在标签集合中添加/更新的新标签数组:
["music","movie","book"]
我可以使用以下查询来更新标签集合中当前存在的所有标签的计数:
db.Tags.update({word:{$in:["music","movies","books"]}}, {$inc:{count:1}}), true, true);
尽管这是一种有效的更新策略,但我无法看到在集合中找不到哪些标记值,并且将upsert标志设置为true不会为未找到的标记创建新文档。
在这里,我应该如何处理将“新”值批量插入“标签”集合中的问题? 还有什么其他方法可以更好地利用更新,以便它可以向上插入新标记值?
(注意:我将Node.js与猫鼬一起使用,使用mongoose / node-mongo-native的解决方案会很好,但不是必须的)
提前谢谢
同时使用upsert
和$in
运算符的概念并不统一。 这根本就行不通,因为upsert if *any* in
upsert if *none* in
和upsert if *none* in
之间没有区别。
在这种情况下,MongoDB正在执行您不希望使用的版本。 但是您不能使其改变行为。
我建议通过遍历标签数组简单地发出三个连续的写操作。 我知道那很烦人,并且有不好的代码味道,但这就是MongoDB的工作方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.