首页 文章

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

提问于
浏览
0

我有一个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 回答

  • 1

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

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

    我建议通过循环标记数组简单地发出三次连续写入 . 我知道这很烦人,它的代码味道很糟糕,但这就是MongoDB的工作原理 .

相关问题