Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从数组中高效地批量插入和更新mongodb文档值?_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 如何从数组中高效地批量插入和更新mongodb文档值?

Node.js 如何从数组中高效地批量插入和更新mongodb文档值?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个标签集合,其中包含以下结构的文档: { 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"]}},

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

{
  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的解决方案很好,但不是必需的)


提前感谢

同时使用
upsert
$in
操作符的概念是不一致的。这根本不起作用,因为在中,
如果*any*插入,则向上插入;在
中,
如果*none*插入,则向上插入

在本例中,MongoDB正在执行您不希望它执行的版本。但你不能让它改变你的行为


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

这个循环真的很糟糕。。。我使用的是未编译的python,循环会大大降低我的代码速度,因为我经常需要更新一长串文档。我正在探索其他基于文档的数据库,看看是否能找到更好的。