返回特定的mongodb嵌入式文档

贾拉蒂夫

我想查询mongodb文件以返回特定文件

假设我有以下文档,并且只想搜索给定房间的特定详细信息。说,我想查询以返回room_num = 210的注释。我该怎么做?

我能够通过db.locations.findOne({“ facility.room.room_num”:room_num})进行查询;我不知道如何只投影房间。概括这个问题,我如何只投影嵌入式文档特定的条目。

我的文档看起来像这样--->

{
  _id: Object("xxx"),
  name: "Campus",
  facilities: [
     { name : "Science",
     rooms : [
          {
             room_num: 210,
             notes: "Chemistry Lab 1",
             Dimension: "x*x"
          },{
             room_num: 120,
             notes: "Chemistry Lab 2",
             Dimension: "x*x"
          }
      ]

    },
    { name : "Arts",
     rooms: [
          {
             room_num: 90,
             notes: "Drawing 1",
             Dimension: "x*x"
          },{
             room_num: 100,
             notes: "Drawing 2",
             Dimension: "x*x"
          }
      ]

    }
  ]
尼尔·伦恩

由于您有一个嵌入式阵列(一个在另一个阵列中),因此您确实可以使用聚合来完成。您只需要执行“双重”展开操作:

db.collection.aggregate([
    { "$unwind": "$facilities" },
    { "$unwind": "$facilities.rooms" },
    { "$match": { "facilities.rooms.room_num": 210 } }
])

如果您真的希望它看起来像原始文档,那么请进一步:

db.collection.aggregate([
    { "$unwind": "$facilities" },
    { "$unwind": "$facilities.rooms" },
    { "$match": { "facilities.rooms.room_num": 210 } },
    { "$group": {
        "_id": "$_id",
        "name": { "$first": "$name" },
        "facName": { "$first": "$facilities.name" },
        "rooms": { "$push": "$facilities.rooms" }
    }},
    { "$group": {
        "_id": "$_id",
        "name": { "$first": "$name" },
        "facities": { "$push": {
            "name": "$facName" ,
            "rooms": "$rooms"
        }}
    }}
])

因此,从您的数据中可以得出以下结果:

{
    "_id" : {
            "0" : "x",
            "1" : "x",
            "2" : "x"
    },
    "name" : "Campus",
    "facities" : [
       {
           "name" : "Science",
           "rooms" : [
               {
                   "room_num" : 210,
                   "notes" : "Chemistry Lab 1",
                   "Dimension" : "x*x"
               }
           ]
       }
    ]
}

或者最后,如果您需要的只是数组的内部房间部分,则只需$project在最后使用一条语句,如第一个示例所示:

db.campus.aggregate([
    { "$unwind": "$facilities" },
    { "$unwind": "$facilities.rooms" },
    { "$match": { "facilities.rooms.room_num": 210 } },
    { "$project": {
        "_id": 0,
        "room_num": "$facilities.rooms.room_num",
        "notes": "$facilities.rooms.notes",
        "Dimension": "$facilities.rooms.Dimension"
    }}
])

结果如下:

{ "room_num" : 210, "notes" : "Chemistry Lab 1", "Dimension" : "x*x" }

那应该清除它。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

mongodb汇总嵌入式文档值

来自分类Dev

如何验证mongodb嵌入式文档

来自分类Dev

mongodb汇总嵌入式文档值

来自分类Dev

查询MongoDB中的嵌入式文档

来自分类Dev

MongoDb $ match用于嵌入式文档

来自分类Dev

何时使用嵌入式文档MongoDB

来自分类Dev

mongodb嵌入式文档搜索

来自分类Dev

在mongodb中展开嵌入式文档

来自分类Dev

MongoDB嵌入式文档参考了其他嵌入式文档

来自分类Dev

如何从mongodb中的嵌套嵌入式文档中查询和返回单个字段?

来自分类Dev

MongoDB聚合查询-重命名嵌入式文档中返回的字段

来自分类Dev

Mongodb:如何使用聚合框架仅返回嵌入式文档

来自分类Dev

MongoDB-更新嵌入式文档和文档本身

来自分类Dev

如何在嵌入式数组mongodb中查询嵌入式文档

来自分类Dev

猫鼬返回[Object]而不是实际的嵌入式文档

来自分类Dev

嵌入式签名视图文档返回 404

来自分类Dev

MongoDB $ project嵌入式文档到根级别

来自分类Dev

MongoDB $ n在嵌入式文档的某些字段中

来自分类Dev

MongoDb试图在嵌入式文档中计数

来自分类Dev

从mongodb中的嵌入式文档中删除元素

来自分类Dev

MongoDB获取dictfield /嵌入式文档的平均值

来自分类Dev

在MongoDB中更新完整的嵌入式文档

来自分类Dev

在mongodb中更新嵌套的嵌入式文档

来自分类Dev

MongoDB-嵌入式文档列表上的$ addToSet

来自分类Dev

mongodb与嵌入式文档的一对多关系

来自分类Dev

在Mongodb中的嵌入式文档上设置索引

来自分类Dev

回送和MongoDB嵌入式文档定义JSON模型

来自分类Dev

查询mongodb中的嵌入式文档数组

来自分类Dev

映射-Symfony2中的Mongodb嵌入式文档