【问题标题】:How to efficiently bulk insert and update mongodb document values from an array?如何有效地从数组中批量插入和更新 mongodb 文档值?
【发布时间】:2012-02-12 21:24:11
【问题描述】:

我有一个标签集合,其中包含以下结构的文档:

{
  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 一起使用,使用 mongoose/node-mongo-native 的解决方案会很好但不是必需的)

谢谢

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    同时使用upsert$in 运算符的概念是不协调的。这根本行不通,因为upsert if *any* inupsert if *none* in 之间没有区别。

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

    我建议通过循环遍历标签数组来简单地发出三个连续的写入。我知道这很烦人,而且代码味道很糟糕,但这正是 MongoDB 的工作原理。

    【讨论】:

    • 这个循环确实很糟糕......我正在使用未编译的python,并且循环会显着减慢我的代码,因为我经常需要更新一长串文档。我正在探索其他基于文档的数据库,看看是否找不到更好的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2015-11-08
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多