MongoDB-DBRef到DBObject
使用Java。。。这并不重要 有问题,可能只是设计问题 我将“_id”字段分配给我的所有文档,甚至是嵌入的文档。 我有一个父文档(以及这些文档的集合),其中包含一个嵌入文档 所以我有点像:MongoDB-DBRef到DBObject,mongodb,mongo-java,dbref,Mongodb,Mongo Java,Dbref,使用Java。。。这并不重要 有问题,可能只是设计问题 我将“_id”字段分配给我的所有文档,甚至是嵌入的文档。 我有一个父文档(以及这些文档的集合),其中包含一个嵌入文档 所以我有点像: { "_id" : "49902cde5162504500b45c2c" , "name" : "MongoDB" , "type" : "database" , "count" : 1 , "info" : { "_id" : "49902cde5162504500b45c2y",
{ "_id" : "49902cde5162504500b45c2c" ,
"name" : "MongoDB" ,
"type" : "database" ,
"count" : 1 ,
"info" : { "_id" : "49902cde5162504500b45c2y",
"x" : 203 ,
"y" : 102
}
}
现在我想要另一个通过DBRef
引用我的“信息”的文档,不需要副本。因此,我创建了一个DBRef
,它指向父文档的集合,并将_id指定为xx5c2y。但是,在DBRef
上调用fetch()
这是否意味着DBRef
和fetch()
仅适用于顶级集合条目“\u id”字段
我本以为fetch()
会使用文档大括号内的所有键:值。。但也许这要求太高了。有人知道吗??除了顶层之外,没有办法创建跨文档引用吗
谢谢是的,您的DBRef\u id引用需要指向集合中的文档,而不是嵌入的文档
如果你想找到嵌入的文档,你需要在info.\u id
上进行查询,你还需要在上面添加一个索引(为了性能),或者你需要将嵌入的文档存储在一个集合中,并将嵌入的文档视为一个副本。在MongoDB中复制是可以的…'一个事实“一个地方”不适用于这里。。。前提是当主副本发生变化时,您可以通过某种方式更新副本(最终一致性)
顺便说一句,关于DBRef,官方指南说“如果集合可以从一个文档更改到下一个文档,大多数开发人员只会使用DBRef。如果引用的集合总是相同的,则上面概述的手动引用更有效。”
另外,为什么要在文档中引用info
?如果它是一个数组,我可以理解为什么您可能希望引用单个条目,但由于在您的示例中它似乎不是数组,为什么不直接按其id引用包含文档?谢谢您的反馈。好的,DBRef。。。仅限顶级文档。我同意你关于“复制”的其他评论,但如果情况确实发生了变化,那么需要制定事件模型来更新许多地点。我的示例(数据模型)并不能真正代表问题模型,在这种情况下,“info”对象实际上是我的问题sapce中的元模型,用于模式分析。因此,对父级(以及父级的子文档)的更改需要更新元模型。我不能完全嵌入这些,因为这意味着改变需要更新数百万个地方。