如何从MongoDB中的子文档数组中只返回一个匹配的子文档(不是数组)?

问题描述 投票:1回答:1

在我的收藏中:

{ "code": xx1
  "valueList": [
                  { "id": "yy1", "name": "name1"},
                  { "id": "yy2", "name": "name2"},
                  { "id": "yy3", "name": "name3"}              
               ]
},
{ "code": xx2
  "valueList": [
                  { "id": "yy4", "name": "name4"},
                  { "id": "yy5", "name": "name5"},
                  { "id": "yy6", "name": "name6"}              
               ]
}

我想返回特定的一个匹配子文档(不是数组),如下所示:

{ "id": "yy3", "name": "name3"}  

我尝试下面的代码:

findOne({ "code": "xx1",
          "valueList.name": "yy3"
       })
.select({ "valueList.$": 1});

它返回一个数组:

 {
   "valueList": [{ "id": "yy3", "name": "name3" }]
 }

我怎么解决这个问题?谢谢

arrays mongodb subdocument
1个回答
1
投票

您可以使用以下聚合:

db.col.aggregate([
    { $match: { "valueList.id": "yy3" } },
    { $unwind: "$valueList" },
    { $match: { "valueList.id": "yy3" } },
    { $replaceRoot: { newRoot: "$valueList" } }
])

首先$match将过滤掉所有不必要的文件,然后你可以使用$unwind获取每个文件的valueList项目然后$match再次获得yy3在最后阶段你可以使用$replaceRootvalueList项目提升到顶级。

© www.soinside.com 2019 - 2024. All rights reserved.