简体   繁体   English

如何在javascript中比较2个相同列表中的对象值

[英]how to compare objects values in 2 identical lists in javascript

i have two collections in mongo db that hold reports, in report there is list matches, so what i want is to run on production reports and for ech one check in staging reports and check that if the matches are the same length if the personId and addressId are also the same...我在 mongo db 中有两个保存报告的集合,在报告中有列表匹配,所以我想要的是在生产报告上运行,对于 ech 一个检查暂存报告并检查匹配是否长度相同,如果 personId 和addressId 也是一样的...

is there aa good way to do this?有没有好的方法可以做到这一点?

i came up with something like this:我想出了这样的事情:

db.production_reports.find({}).forEach((prodRep)=> { 
      db.reports.find({_id: prodRep._id}).forEach((stagingRep)=> { 
         if (prodRep.matches.length == stagingRep.matches.length) {
             prodRep.matches.forEach((match)=> {
                 var res = stagingRep.matches.filter(element => element.personId == match.personId && element.addressId == match.addressId);
                 if (res) {
                     print("yay")
                 } else {
                     print("nay")
                 }
             });
         }
      });
});

i want for each report the script to tell me "yes, all matches equal", or print the reportId that have non equal matches我希望每个报告的脚本告诉我“是的,所有匹配项都相等”,或者打印具有不相等匹配项的 reportId

thanks谢谢

I would draft something like this :我会起草这样的东西:

return new Promise((resolve) => {
  const data = {
    // contains an array of _id of missing production_reports
    missing: [],
    different: [],
  };

  // Look at each entry in production_reports
  db.production_reports.find({})
    .cursor()
    .eachAsync(async (x) => {
      // get the similar data on reports
       const copy = await db.reports.find({
         _id: x._id,
       });

       // If the data doesn't exists into reports
       if (!copy || !copy.length) {
          data.missing.push(x._id);

          return;
       }

       // If it exists, compare the inner values

       // if the size isn't the same, it's obviously different
       if (x.matches.length !== copy.length) {
         data.different.push(x._id);

         return;
       }

       // Check every element of match one by one
       if (x.matches.some(y => !copy.matches.some(z => z.personId === y.personId))) {
          data.different.push(x._id);
       }
    }, {
      // How many items do we look at same time
      parallel: 250,
    }, () => {
      // When we are done processing all items
      resolve(data);
    });
});

NOTE : It won't give you missing documents that exists in reports but not in production_reports注意:它不会为您提供报告中存在但 production_reports 中不存在的缺失文档

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM