如何创建查询以仅从 MongoDB 和 C# 中的特定记录的列表中获取 N 个条目?
How to create a query to get only N entries from a list in certain record in MongoDB and C#?
我需要从 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
ListOfItems
可能应该引用另一个集合,而不是嵌入式数组。您可以在查询 MongoDB 时包含或不包含字段(包括子文档),但我不知道在 MongoDB 侧的子文档中过滤、限制或跳过项目的方法.
通常,如果您熟悉领域驱动设计,您会嵌入 'value objects'(即在上下文之外其生命无关紧要的事物,例如一个人的电子邮件地址的价值;您不不需要更改轨道,您只需要当前的轨道)和 Link 'entities'(在上下文之外有意义的东西,例如,也许一个地址可能在给定的范围内经过多个所有者系统,因此您可以在它自己的集合中跟踪它)。
此外,作为一般规则,如果您总是希望它们与包含的对象同时被获取,则您可以嵌入它们。如果您有时需要它们而有时不需要它们,那也没关系,但是如果您有一个列表并且只想要其中的一些基于某些查询参数,这开始表明它们具有自己的上下文含义,您可能会考虑将它们拆分成自己的集合。
我需要从 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
ListOfItems
可能应该引用另一个集合,而不是嵌入式数组。您可以在查询 MongoDB 时包含或不包含字段(包括子文档),但我不知道在 MongoDB 侧的子文档中过滤、限制或跳过项目的方法.
通常,如果您熟悉领域驱动设计,您会嵌入 'value objects'(即在上下文之外其生命无关紧要的事物,例如一个人的电子邮件地址的价值;您不不需要更改轨道,您只需要当前的轨道)和 Link 'entities'(在上下文之外有意义的东西,例如,也许一个地址可能在给定的范围内经过多个所有者系统,因此您可以在它自己的集合中跟踪它)。
此外,作为一般规则,如果您总是希望它们与包含的对象同时被获取,则您可以嵌入它们。如果您有时需要它们而有时不需要它们,那也没关系,但是如果您有一个列表并且只想要其中的一些基于某些查询参数,这开始表明它们具有自己的上下文含义,您可能会考虑将它们拆分成自己的集合。