微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MongoDB 如果存在则更新,如果不存在则插入:从集合 A 到集合 B 的数组

如何解决MongoDB 如果存在则更新,如果不存在则插入:从集合 A 到集合 B 的数组

我有 2 个集合 MasterPage_id 集合中的 Mastermaster_page_id 集合的 Page 字段中被引用。 我在 express js API 中使用 updateMany()upsert: true 来过滤和更新现有的并将新从 Master 插入到 Page

过滤条件:

更新 IF页面集合中的 master_page_id 与主集合中的 _id 匹配 ElseINSERTMasterPage

的记录

现在我需要遍历来自 Master 的数据数组,并为每条记录调用 updateMany 以进行 upsert。 有没有更好的方法,我可以从 master 发送整个数组,如果存在则更新,如果不存在则插入

以下是大师合集

[
{"_id":{"$oid":"60e3f0b29515843a7250d2a3"},"page_status":"Active","page_name":"page_one","page_title":"New Page","page_Meta_tags":{"page_description":"This is New Page","page_keyword":null},"page_slug":"/new-page","entity":null,"master_page_version":"version_001"},{"_id":{"$oid":"60e3f0b29515843a7250d2a4"},"page_name":"page_two","page_title":"3 comp and 2 override","page_slug":"/page_two",{"_id":{"$oid":"60e3f0b29515843a7250d2a5"},"page_author":"Bharath","page_name":"page_three","page_title":"3 comp and 0 override","page_slug":"/page_three","master_page_version":"version_001"}
]

以下是页面

[
{"_id":{"$oid":"60dbe7ae75fa3a2c0434a87a"},"master_page_id":"60e3f0b29515843a7250d2a3","master_page_version":"version_001"}
]

快递Js

Masters.aggregate([ 
      {
        $match: {client_id: "C_00001"}
      },{
        $project: {
          _id: 1,page_name: 1,page_title: 1,page_type: 1,page_status: 1,page_slug: 1,page_Meta_tags: {
            page_description: 1,page_keyword: 1
          },entity: 1,master_page_id: "$_id",client_id: client_id,}
      }

    ]).exec((err,data) => {
      if (err) { res.status(HttpStatusEnum.badserver).json(err); return; };

      if(data && data.length > 0){
        data.forEach(rec => {
          Pages.updateMany({ 
            "master_page_id": rec._id
          },{
            $set: {
              page_status: rec.page_status,page_name: rec.page_name,page_title: rec.page_title,page_type: rec.page_type,page_Meta_tags: rec.page_Meta_tags,page_slug: rec.page_slug,entity: rec.entity,master_page_id: rec._id,master_page_version: rec.master_page_version,client_id: rec.client_id
            }
          },{ upsert: true },).exec((err,doc) => {
            res.status(HttpStatusEnum.success).json({doc});
          });
        });
      }
    });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。