如何有效地批量插入和更新数组中的mongodb文档值?

时间:2012-01-18 04:54:59

标签: node.js mongodb mongoose

我有一个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的解决方案会很好但不是必需的)

提前致谢

1 个答案:

答案 0 :(得分:1)

同时使用upsert$in运算符的概念是不协调的。这根本不起作用,因为upsert if *any* inupsert if *none* in之间无法区分。

在这种情况下,MongoDB正在执行您不希望它执行的版本。但你不能让它改变行为。

我建议通过循环遍历标记数组来发出三次连续写入。我知道这很烦人,它的代码味道很糟糕,但这就是MongoDB的工作方式。