【发布时间】:2019-01-13 00:49:18
【问题描述】:
我在使用 forEach 和更新时遇到问题,
我想用 B 集合的文档更新 A 集合。 例如,
db.collection(B).find().toArray(function(err, result) {
....
result.forEach(doc){
....
db.collection(A).updateOne(query...){
}
}
}
而且,B 不仅仅是一个集合。在我的代码中,B 是数组,B = [B1, B2, B3 ... ]。 (不是我真正的值名是B。只是例子)
我想用 Promise 或者 async,但是不知道怎么用。
for(i = 0; i < B.length; i++)
also as same upper code
有什么想法或方法可以解决这个问题吗? TT..
我 B 的 doc 字段是这样的。
{_id:ObjectId(..), value1:[a, b], value2:"ccc"}
然后,我从 a 中提取 x,从 b 中提取 y,从 value2 中提取 z; 以及我想要的 A 的 doc 字段是这样的,
{_id:ObjectId(..), x : x, y : y, z : z, ids:[id1]}
从 B 中获取每一列,匹配 x,y,z 就像添加 ids 数组一样
{_id:ObjectId(..), x : x, y : y, z : z, ids:[id1, id2]}
它不匹配x,y,z,只需插入
{_id:ObjectId(..), x : x, y : y, z : z, ids:[id1]}.]
我使用了 updateOne(query, value, upsert)
query : {x:x, y:y, z:z}
value : {$set:{x:x, y:y, z:z}, $addToSet:{ids:{$each:{id}}}}
upsert : {upsert:true}
【问题讨论】:
-
使用
bulkWrite操作代替循环 -
@AnthonyWinzlet 谢谢!我会搜索它,我会尝试我的代码
标签: node.js mongodb asynchronous promise find