为了账号安全,请及时绑定邮箱和手机立即绑定

循环遍历集合中的所有文档和每个文档中的数组,以将数组值与项目匹配

循环遍历集合中的所有文档和每个文档中的数组,以将数组值与项目匹配

慕丝7291255 2021-06-01 13:02:46
我有一个具有以下结构的 MongoDB 集合:/* 1 */{    "_id" : ObjectId("5cdb24b41a40ae58e6d690fd"),    "versions" : [         ObjectId("5cdb24b41a40ae58e6d690fe")    ],    "releases" : [],    "monetization" : [],    "owner" : "testuser",    "name" : "test-repo-2",    "repoAddress" : "/testuser/test-repo-2",    "repoKey" : null,    "__v" : 0}/* 2 */{    "_id" : ObjectId("5cdb23cb1a40ae58e6d690fa"),    "versions" : [         ObjectId("5cdb23cb1a40ae58e6d690fb"),         ObjectId("5cdda9c54e6d0b795a007960")    ],    "releases" : [         ObjectId("5cdda9c54e6d0b795a00795c")    ],    "monetization" : [],    "owner" : "testuser",    "name" : "test-repo-1",    "repoAddress" : "/testuser/test-repo-1",    "repoKey" : null,    "__v" : 2,    "createdAt" : ISODate("2019-05-16T18:19:49.159Z"),    "updatedAt" : ISODate("2019-05-16T18:19:49.252Z")}我需要遍历集合中的所有文档以及它们的版本数组,以查找特定的以将其与项目匹配。我需要用 NodeJS 来做这件事,但现在我正在从 mongoshell 尝试它。我正在尝试使用forEach()和$in操作符来做到这一点。db.projects.find().forEach(    function () {        {            versions: {                $in: ['5cdb24b41a40ae58e6d690fe']            }        }    });但是每次我收到以下回复时:Script executed successfully, but there are no results to show.我这样做正确吗?
查看完整描述

1 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

您可以尝试多种解决方案,例如:


1)您可以在查找查询中添加过滤器:


db.getCollection('debug').find({"versions":{"$in":[ObjectId("5cdb24b41a40ae58e6d690fe")]}})

这将直接返回您正在寻找的对象。


2)如果你不想通过过滤器而真正查询所有文档并自己过滤它们,你可以尝试以下方法:


db.getCollection('debug').find({}).forEach(doc => {


     doc.versions.forEach(v => {


         if(v.toString() === "ObjectId(\"5cdb24b41a40ae58e6d690fe\")") {

               print("match");

         }


     });        


});


查看完整回答
反对 回复 2021-06-03
  • 1 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信