【问题标题】:query the value of a sub document in mongodb查询mongodb中子文档的值
【发布时间】:2013-08-11 21:59:48
【问题描述】:

我正在使用 Java 驱动程序,文档看起来像这样(一个真实的测试示例):

{
    "_id" : ObjectId("5207fe359b88bfa6f90a82b0"),
    "meta_id" : "d6eb1b13-50c7-473f-8348-b5a638a542a0",
    "name" : "Fake Name Inc.",
    "created" : ISODate("2013-08-11T21:12:21.533Z"),
    "members" : {
        "5207fe359b88bfa6f90a82af" : [
            "Admin",
            "User"
        ]
    }
}

我想选择路径“members.5207fe359b88bfa6f90a82af”处的字符串数组(这是一个角色列表)。 我不知道该怎么做。看起来投影在这里可以工作,但我对 Mongo 还很陌生,所以投影的编写方式并不明显。

我当然可以加载整个对象,甚至可能只加载“成员”字段,但我认为我应该能够准确地选择我想要的数据。

那么,有人知道如何编写这样的查询吗?

注意:这个问题表明我可能需要更改文档的结构以使事情变得更容易:MongoDB - Query by sub-tree

【问题讨论】:

    标签: mongodb mongodb-query mongodb-java


    【解决方案1】:

    您可以在find 的投影参数中使用点符号来执行此操作。在外壳中:

    db.test.find(
        {_id : ObjectId("5207fe359b88bfa6f90a82b0")},
        {'members.5207fe359b88bfa6f90a82af': 1, _id: 0})
    

    返回:

    {
      "members": {
        "5207fe359b88bfa6f90a82af": [
          "Admin",
          "User"
        ]
      }
    }
    

    【讨论】:

    • 嗯...我正在尝试,但也许我的功能测试没有看到正确的东西,因为我没想到整个结构会回来。投影中的“_id:0”是什么?
    • @BrillPappin 这是在返回的文档中排除_id 字段,否则默认情况下会包含它。
    • 啊,有道理。默认情况下会返回我认为我阅读的文档本身的 _id。
    猜你喜欢
    • 2018-12-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多