2012-01-18 103 views
0

我有一个标签集合包含以下结构的文件:如何高效地批量插入和更新数组中的mongodb文档值?

{ 
    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); 

虽然这是一种有效的策略, pdate,我无法看到集合中没有找到哪些标记值,并且将upsert标志设置为true并未为未标记的标记创建新文档。

这是我被卡住的地方,我应该如何处理批量插入的“新”值到标签集合中? 有没有其他方法可以更好地利用更新,以便它可以插入新的标签值?

(注:我使用的猫鼬/节点蒙戈本机将是不错,但没有必要使用Node.js的与猫鼬,解决方案)

感谢提前

回答

1

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

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

我会建议通过循环标签数组来简单地发出三个连续写入。我知道这很烦人,它有一个不好的代码味,但这就是MongoDB的工作原理。

+0

这个循环真的很烂......我使用的python是非编译的,循环会显着减慢我的代码,因为我经常需要更新一长串文档。 我正在探索其他基于文档的数据库,以查看我是否找不到更好的东西。 – RockScience 2013-10-30 02:54:20

相关问题