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

我有一个具有以下结构的 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.我这样做正确吗?


慕丝7291255
浏览 178回答 1
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");         }     });        });
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript