使用Java ...这并不重要。
有一个问题,也许这只是一个设计问题。
我将"_id“字段分配给我的所有文档,甚至是嵌入式文档。我有一个包含嵌入式文档的父文档(以及这些文档的集合
所以我有一些类似的东西:
{ "_id" : "49902cde5162504500b45c2c" ,
"name" : "MongoDB" ,
"type" : "database" ,
"count" : 1 ,
"info" : { "_id" : "49902cde5162504500b45c2y",
"x" : 203 ,
"y" : 102
}
}现在我想要另一个通过DBRef引用我的“信息”的文档,我不想要一个副本。因此,我创建了一个DBRef,它指向父文档的集合,并将_id指定为xxxx5c2y。但是,在DBRef上调用fetch()会得到一个NULL。
这是否意味着DBRef和fetch()只适用于顶级集合条目"_id“字段?
我原以为fetch()会使用文档大括号内的所有键:值。但也许这要求太高了。有人知道吗??除了在顶层之外,没有其他方法可以创建跨文档引用吗?
谢谢
发布于 2011-08-20 13:00:59
是的,您的DBRef _id引用需要指向集合中的文档,而不是嵌入的文档。
如果你想找到嵌入的文档,你需要在info._id上做一个查询,你还需要在上面添加一个索引(为了性能),或者你需要把这个嵌入的文档存储在一个集合中,并把嵌入的文档当作一个副本。在MongoDB中复制正常...“一个事实一个地方”在这里不适用……如果你有一些方法可以在主副本发生变化时更新副本(最终的一致性)。
顺便说一句,在DBRef上,官方指南说:“大多数开发人员只在集合可以从一个文档更改到下一个文档时才使用DBRefs。如果您引用的集合总是相同的,上面列出的手册参考更有效率。”
另外,为什么要在文档中引用info?如果它是一个数组,我可以理解为什么您可能想要引用单个条目,但既然在示例中它不是一个数组,为什么不直接通过_id引用包含文档呢?
https://stackoverflow.com/questions/7127881
复制相似问题