我有一个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并未为未完成的标记创建新文档 .
这就是我被困住的地方,我应该如何处理“新”值的批量插入到Tags集合中?有没有其他方法可以更好地利用更新,以便它可以插入新的标签值?
(注意:我使用带有mongoose的Node.js,使用mongoose / node-mongo-native的解决方案会很好但不是必需的)
谢谢你
1 回答
同时使用
upsert
和$in
运算符的概念是不协调的 . 这根本不起作用,因为upsert if *any* in
和upsert if *none* in
之间无法区别 .在这种情况下,MongoDB正在执行您不希望它执行的版本 . 但你不能让它改变行为 .
我建议通过循环标记数组简单地发出三次连续写入 . 我知道这很烦人,它的代码味道很糟糕,但这就是MongoDB的工作原理 .