我有一个具有以下结构的 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");
}
});
});
添加回答
举报
0/150
提交
取消