直接在mongodb中通过ObjectID获取子文档

时间:2014-08-18 16:06:34

标签: json mongodb database

有这样的结构:

/* 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?

2 个答案:

答案 0 :(得分:1)

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

你的" Josh"对象看起来像这样: { "_id" : ObjectId("53f1f192477aa5da607b20a3"), "name" : "Josh", "mother" : { "$ref" : "tree", "$id": ObjectId("53f1f19a477aa5da607b20a4") } }

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

答案 1 :(得分:1)

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