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

埃尔文

在我的收藏中:

{ "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" }]
 }

我该如何解决?谢谢

米克尔

您可以使用以下聚合:

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

首先$ match将过滤掉所有不必要的文档,然后您可以使用$ unwind来获取valueList每个文档的项目,然后$match再次使用仅获得yy3最后一个文档的项目,可以使用$ replaceRootvalueList项目提升到最高级别。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仅返回嵌套数组中匹配的子文档元素

如何使用MongoDB过滤子文档中的数组

如何在Mongodb中返回与给定条件匹配的子文档数组?

在MongoDB文档子文档数组中插入和返回子文档ID

在Mongoose / MongoDB中的子文档,数组,文档中过滤数组

MongoDB筛选文档并仅返回匹配的子文档(如果存在),否则返回null或空数组或空对象

从数组中返回匹配的文档

如何在mongodb中的所有文档中的子文档数组中添加字段?

更新子文档中的数组-mongoose mongodb

查询Mongodb中的子文档数组

在另一个子文档数组中的猫鼬增量子文档数组值

匹配,更新并返回数组中的最后一个子文档

如果只有子文档元素在嵌套数组中匹配,则返回文档

如何在MongoDB中查找并插入子文档数组列表?

如何使用C#驱动程序更新MongoDB中数组子文档中包含的数组子文档中的字段?

MongoDB更新数组中的错误子文档

如何覆盖mongodb中的子文档的数组属性(猫鼬)

如何在一个数组猫鼬中存储不同的子文档?

如何使用Meteor和MongoDB从数组中的对象返回子文档

更新MongoDB中的子文档数组

如何在MongoDb中查找与数组中的字段和子文档字段匹配的文档

在MongoDB中对与子数组条件匹配的文档进行计数

如何在mongo中过滤子数组并返回文档

Mongodb C# 驱动程序只返回数组中匹配的子文档

在 Mongoose 中过滤子文档数组并仅返回匹配的元素

子文档数组上的 MongoDB 查询和投影也返回另一个文档的数组

Group by使用pymongo仅返回mongodb中的第一个匹配文档,如何检索所有匹配的文档?

Mongoose ADDING/SUMING 子文档数组值位于另一个子文档数组中

如何从文档中的对象数组中仅获取一个与搜索条件匹配的对象?