我有一个Tags集合,其中包含以下结构的文档:
{
word:"movie", //tag word
count:1 //count of times tag word has been used
}
我收到了一系列需要在Tags集合中添加/更新的新标签:
["music","movie","book"]
我可以使用以下查询更新标记集合中当前存在的所有标记的计数:
db.Tags.update({word:{$in:["music","movies","books"]}}, {$inc:{count:1}}), true, true);
虽然这是一个有效的更新策略,但是我无法看到集合中找不到哪些标记值,并且将upsert标志设置为true并没有为未完成的标记创建新文档。
这就是我被困住的地方,我应该如何处理" new"值集成到Tags集合中? 有没有其他方法可以更好地利用更新,以便它可以插入新的标记值?
(注意:我使用带有mongoose的Node.js,使用mongoose / node-mongo-native的解决方案会很好但不是必需的)
提前致谢
答案 0 :(得分:1)
同时使用upsert
和$in
运算符的概念是不协调的。这根本不起作用,因为upsert if *any* in
和upsert if *none* in
之间无法区分。
在这种情况下,MongoDB正在执行您不希望它执行的版本。但你不能让它改变行为。
我建议通过循环遍历标记数组来发出三次连续写入。我知道这很烦人,它的代码味道很糟糕,但这就是MongoDB的工作方式。