使用Java ......并不重要。
遇到问题,也许只是一个设计问题。
我将“_id”字段分配给我的所有文档,甚至是嵌入的文档。 我有一个父文档(以及那些具有嵌入文档的集合)
所以我有类似的东西:
{ "_id" : "49902cde5162504500b45c2c" ,
"name" : "MongoDB" ,
"type" : "database" ,
"count" : 1 ,
"info" : { "_id" : "49902cde5162504500b45c2y",
"x" : 203 ,
"y" : 102
}
}
现在我想要另一个通过DBRef
引用我的“信息”的文档,不想要副本。因此,我创建了一个DBRef
,它指向父文档的集合,并将_id指定为xxxx5c2y。但是,在fetch()
上调用DBRef
会给出NULL。
这是否意味着DBRef
和fetch()
仅适用于顶级集合条目“_id”字段?
我原本以为fetch()
会占用所有键:文档大括号内的值..但可能是要求太多。有人知道吗??除顶层以外,是否无法创建交叉文档引用?
由于
答案 0 :(得分:1)
是的,您的DBRef _id引用需要是集合中的文档,而不是嵌入文档。
如果要查找嵌入式文档,则需要在info._id
上进行查询,并且还需要在其上添加索引(性能)或者您需要存储嵌入式文档集合中的文档并将嵌入的文档视为副本。在MongoDB中复制是正常的......“一个地方的一个地方”在这里不适用...只要你有一些方法可以在主要版本发生变化时更新副本(最终的一致性)。
另外,为什么要在文档中引用info
?如果它是一个数组,我可以理解为什么你可能想要引用单个条目,但由于它在你的例子中似乎不是一个数组,为什么不通过它的_id引用包含文档?