比较同一文档中的两个数组字段 [英] Compare two array fields in same document

查看:69
本文介绍了比较同一文档中的两个数组字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个带有数据的不同数组,我必须将两个对象中的两个数组合并到一个对象中,如何在MongoDB Aggregation的帮助下进行合并. 这是我的两个数组

I have two different Arrays with Data and I have to merge two arrays same object in one object how can I merge with help of MongoDB Aggregation. here are my two Arrays

{"ids" : [
    {
        "_id" : ObjectId("5ba8d8dfaa988532967029af"),
        "level" : 2,
        "completed" : 5,
        "asset" : ObjectId("5ba8caa1aa98853296702989")
    },
    {
        "_id" : ObjectId("5ba8d8dfaa988532967029b0"),
        "level" : 2,
        "completed" : 3,
        "asset" : ObjectId("5ba8caf6aa9885329670298a")
    },
    {
        "_id" : ObjectId("5ba8d8dfaa988532967029b1"),
        "level" : 2,
        "asset" : ObjectId("5ba8cb09aa9885329670298b")
    }]}

{"total" : [
    {
        "total" : 1,
        "asset" : ObjectId("5ba8caa1aa98853296702989"),
        "level" : 2
    },
    {
        "total" : 1,
        "asset" : ObjectId("5ba8caf6aa9885329670298a"),
        "level" : 2
    },
    {
        "total" : 1,
        "asset" : ObjectId("5ba8cb09aa9885329670298b"),
        "level" : 2
    }]}

在上面的两个数组中显示了数据,我只想合并资产和级别相同的那个对象

in upper two arrays data are shown I want to merge only that object whose asset and level are same

Expected Result:[{
                 "level" : 2,
                 "asset" : ObjectId("5ba8caa1aa98853296702989"),
                 "total" : 1,
                 "completed" : 5,
                 },{
                 "level" : 2,
                 "asset" : ObjectId("5ba8caf6aa9885329670298a"),
                 "total" : 1,
                 "completed" : 3,
                }]

推荐答案

如果已经有两个对象,则可以这样做.但是如果您需要从mongoDb中获取它,则应该在mongo聚合中使用$ mergeObject.

if you already have two objects then you can do like this. but if you need to get it from mongoDb then you should use $mergeObject in mongo aggregation.

var a = [
    {
        "_id" : "5ba8d8dfaa988532967029af",
        "level" : 2,
        "completed" : 5,
        "asset" : "5ba8caa1aa98853296702989"
    },
    {
        "_id" : "5ba8d8dfaa988532967029b0",
        "level" : 2,
        "completed" : 3,
        "asset" : "5ba8caf6aa9885329670298a"
    }];
    
 var b = [
    {
        "total" : 1,
        "asset" : "5ba8caa1aa98853296702989",
        "level" : 2
    },
    {
        "total" : 1,
        "asset" : "5ba8caf6aa9885329670298a",
        "level" : 2
    }];
    var output = [];
    function extend(obj, src) {
	src.forEach(function(key,index) { 
          if(obj[index]["asset"] == src[index]["asset"] && obj[index]["level"] == src[index]["level"]){
            let c = {...obj[index],...src[index]};
            output.push(c);
           }
         
        });
    }
  extend(a, b);
  console.log(output)

这篇关于比较同一文档中的两个数组字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆