【问题标题】:Getting subdocument by ObjectID directly in mongodb直接在mongodb中通过ObjectID获取子文档
【发布时间】:2014-10-11 14:47:11
【问题描述】:

有这样的结构:

/* 0 */
{
    "_id" : ObjectId("53f1f19a477aa5da607b20a4"),
    "name" : "Anna"
}

/* 1 */
{
    "_id" : ObjectId("53f1f192477aa5da607b20a3"),
    "name" : "Josh",
    "mother" : ObjectId("53f1f19a477aa5da607b20a4")
}

是否有可能获得母亲的完整文件而不是获得ObjectId。我的意思是,如果我执行此查询: db.tree.find({"name" : "Josh"}) 我得到了 Josh 的文件,但我无法得到 Anna 的名字,因为我应该做另一个查询。当一个字段引用另一个文档以避免多个查询时,mongodb 是否可以获取文档的完整树/json?

【问题讨论】:

标签: json mongodb database


【解决方案1】:

为了清楚起见:MongoDB 不进行连接 - 将 mother ObjectId 解析为文档需要第二次查询。正如 AntonioOtero 所指出的,一些驱动程序和 ORM,如 MongoTemplate 或 Mongoose,会自动或根据请求为您执行参考解析。但是,您应该知道这会导致多个数据库查询。

【讨论】:

    【解决方案2】:

    这取决于您使用的驱动程序,但您可以使用 DBref。看看this article

    您的“Josh”对象将如下所示: { "_id" : ObjectId("53f1f192477aa5da607b20a3"), "name" : "Josh", "mother" : { "$ref" : "tree", "$id": ObjectId("53f1f19a477aa5da607b20a4") } }

    如果你使用 Java 和 Spring 的 MongoTemplate,你可以通过使用注解 @DBRef 来做到这一点,当你查询 Josh 时,你会得到 Anna 嵌入到 Josh 的对象中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      相关资源
      最近更新 更多