MongoDB按id获取文档嵌套数组

MongoDB按id获取文档嵌套数组,mongodb,mongoose,Mongodb,Mongoose,我有一个带有嵌套附件数组的流程文档,我想返回带有流程id和附件id的文件名 我尝试了许多选项,最近的尝试仍然返回附件数组中的所有项目。我只想要与过去的附件id匹配的附件 db.getCollection('processes').find( {$and: [ { "_id" : ObjectId("5a9455d7854cd987a40b1ba4") }, { "attachments._id" : ObjectId("5a983da6201ba5a2302fb38f") }]}, {'at

我有一个带有嵌套附件数组的流程文档,我想返回带有流程id和附件id的文件名

我尝试了许多选项,最近的尝试仍然返回附件数组中的所有项目。我只想要与过去的附件id匹配的附件

db.getCollection('processes').find(
{$and: [ { "_id" : ObjectId("5a9455d7854cd987a40b1ba4") }, 
{ "attachments._id" : ObjectId("5a983da6201ba5a2302fb38f") }]},
{'attachments._id': 1, 'attachments.fileName': 1}
)
非常感谢您的任何建议,谢谢

您可以在投影中使用,从嵌套数组中仅获取一个子文档:

db.getCollection('processes').find(
    { "_id" : ObjectId("5a9455d7854cd987a40b1ba4") },
    { attachments: { $elemMatch: { _id: ObjectId("5a983da6201ba5a2302fb38f") } } } )
可以使用“在投影中”从嵌套数组中仅获取一个子文档:

db.getCollection('processes').find(
    { "_id" : ObjectId("5a9455d7854cd987a40b1ba4") },
    { attachments: { $elemMatch: { _id: ObjectId("5a983da6201ba5a2302fb38f") } } } )

非常感谢米克尔!,这正是我想要的。非常感谢米克尔!,这正是我想要的。