【问题标题】:RavenDB - Query specific type in mixed collectionsRavenDB - 查询混合集合中的特定类型
【发布时间】:2013-11-06 23:49:35
【问题描述】:

几周前,我问是否有可能在 raven 的一个“集合”中包含多种类型,我很喜欢。但是现在我开始编写一些索引/查询,并且遇到了问题..

我没有意识到这意味着所有类型都将被视为同一事物。我认为“集合”只是用于 RavenDB Management Studio 的字符串。所以……在这种情况下……

class Prototypes : { // ... }

使用身份模式items/prototypes/#进入“items”集合

class Items : { // ... }

使用身份模式items/#进入“items”集合

class Schemas : { // ... }

使用身份模式items/##/schemas/##

进入“items”集合

如果我这样做...

var prototypes = RavenSession.Query<Prototype>().ToArray();

我也得到了所有的项目和模式。有什么方法可以具体说明我想从索引/查询中返回的内容类型吗?

最初希望将它们归为一个集合只是为了保持整洁,而不是有很多不同的集合。当时我没有意识到这会发生,因为我认为对于查询来说重要的是类名,而不是集合名。

【问题讨论】:

    标签: ravendb


    【解决方案1】:

    您应该只从该查询中返回 Prototype 项目。当您向动态查询提供类型时,所构建的索引已经将结果过滤到该类型。它使用Raven-Entity-Name 元数据进行过滤,这一切都在后台神奇地发生。您不必考虑太多。

    您是否真的从该查询中返回 Items 和 Schemas 类型?你不应该。

    顺便说一句 - 这些是非常奇怪的实体名称。通常使用更具体的类,例如Customer 或BlogPost。拥有像Prototypes、Items、Schemas 这样的类似乎很奇怪,除非您正在构建一些非常通用的并且这些与您的域相关。

    【讨论】:

    • 确实,相对于域而言,它们非常通用。项目实现了多个原型,这是它们的基本概念。 (例如,所有武器都不是剑,但所有武器都是武器。剑和武器是原型,“特定”剑继承了两者的特征)。架构是项目的实例(两个角色可能有同一个项目的不同实例,并以某种方式自定义它们)
    • 是的,我要返回项目和模式,因为它们都在同一个集合中。 Ayende 告诉我不可能做我正在尝试的事情,所以我想我只是回到不同的系列。你可以在这里看到整个主题:groups.google.com/forum/#!topic/ravendb/gG2syQjssQw
    • 让我们假设一把双手剑...Special Two-Hand Sword。这是items/12,其中包含原型Sword、Two-Hand Weapon 和Weapon 的完整数据。两个角色得到这个项目。他们有items/12/schemas/1 和items/12/schemas/2。这允许它们成为独立的项目,但在机制上可以被视为相同 - 并且将来可以创建新实例。
    • 这对我们的设计很重要,因为我们希望能够基于更简单的原型制作全局行为。 (例如在游戏中具有与生俱来的伤害加成的双手武器)。我们打算用一个简单的字段来做到这一点,但是随着我们继续发展我们了解到的概念,我们希望它变得更加多样化(例如向原型添加实际统计数据,并允许它们被父母继承或抑制)。所以最后我们确定像这样深入研究是最好的结果,因为 Raven 允许我们将整个文档存储在父母中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多