有这样的结构:
/* 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?
答案 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,将自动或通过请求为您执行参考分辨率。但是,您应该知道这会导致多个数据库查询。