【发布时间】:2016-06-05 16:17:34
【问题描述】:
我需要从 Block 的 ListOfItems 获取最后 12 个条目,其 Name 是 "corner":
public class Block {
public ObjectId Id { get; set; }
public string Name;
public List<Items> ListOfItems;
}
但是由于ListOfItems中可以有很多很多的项目,所以所有的操作都必须在数据库服务器上进行,而不是在本地进行。顺便说一句,这有可能吗?
怎么做?
结论:
这是不可能的,但这是真正的发现:linking, instead of embedding
【问题讨论】:
-
我认为这是不可能的。您需要从 Mongo 中提取整个
Block才能访问ListOfItems。我认为您的数据库架构是这里的问题。 -
@NateBarbettini,你有什么建议?
ListOfItems是否应该在Block的外部,并带有将它们绑定在一起的键? (就像 SQL 一样?) -
ListOfItems 是嵌入还是引用?
-
是的。一般来说,如果你熟悉领域驱动设计,你会嵌入“价值对象”(即在上下文之外生命无关紧要的东西,例如一个人的电子邮件地址的价值;你不需要改变轨道你只需要当前的)和链接“实体”(在上下文之外有意义的东西,例如,一个地址可能会通过给定系统中的多个所有者,所以你可以在它自己的集合中跟踪它)。
-
抱歉,有点长。此外,作为一般规则,如果您总是希望它们与包含对象同时被获取,则您嵌入事物。如果您有时想要它们有时不想要它们,那也没关系,但是如果您有一个列表并且只想要基于某些查询参数的其中一些,这开始表明它们具有自己的上下文含义,您可能会考虑将它们分成自己的集合。
标签: c# mongodb mongodb-.net-driver mongodb-csharp-2.0