【问题标题】:nodejs, mongodb find with forEach and updatenodejs, mongodb 使用 forEach 查找并更新
【发布时间】: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


【解决方案1】:

示例:将集合 A 更新为 B

 db.getCollection('B').find().forEach(function (doc1) {
    var updateData = {x :doc1.value1[0], y:doc1.value1[1], z: doc1.value2 };
    var doc2 = db.getCollection('A').findOne(updateData);
    if (doc2 != null) {
         db.getCollection('A').update(updateData,{ $addToSet: { 'ids': doc1._id }})
    }else{
         updateData.ids = [doc1._id];
         db.getCollection('A').save(updateData);
    }

});

参考链接:How to update a collection based on another collection in MongoDB?

【讨论】:

  • 我不直接使用doc1到A,我必须修改doc1转换一些值,然后将一些值插入到A。我现在将搜索保存功能!
  • 我对你的回答有疑问,集合 A 和 B 完全是其他集合可以吗?
  • 是的,它的工作。我已经在本地使用“MongoDB 管理工具”进行了测试
  • 当然,我很乐意为您提供帮助
  • 我真的很感谢你。我的更新方法是这样的,如果匹配查询文档不存在,只需插入 doc1。但是存在,更新 A 的匹配 doc1。但 doc1 的字段(ids)之一是数组类型。当我使用保存功能时,它不起作用追加 ids 归档 T.T..
猜你喜欢
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 2020-08-09
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多