在RavenDB中修改嵌套集合中的特定项

本文关键字:嵌套 RavenDB 修改 集合 | 更新日期: 2023-09-27 18:14:08

我有一些看起来像下面的文档结构:

public class Document {
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Property> Properties { get; set; }
}
public class Property {
    public int Id { get; set; }
    public string Name { get; set; }
}

现在,查询和修改文档很容易。但我需要在我的应用程序中访问特定的属性实例,似乎他们不会像根文档那样自动获得ID。这似乎是RavenDB的设计。

我可能被困在关系世界中,但我想做的基本上是检索正确的文档,然后获得正确的属性,修改它并再次保存文档。

from property in document.Properties 
where property.Id == someId
select property

…显然,只要

  • RavenDB不自动设置Id字段
  • 我自己没有做任何id生成机制

是我完全走错了路,还是我想做的有意义?我应该将属性移出作为根节点,并在文档中对它们进行某种引用吗?或者在插入属性时应该这样做:

  1. 检索带有属性列表的文档
  2. 获取属性[last]的ID
  3. 添加1并在新属性中插入新ID

?

然而,这将需要至少两个请求(一个获取现有属性,一个保存更改)到数据库,对于这样一个看似简单的任务来说,这似乎很脏而且没有必要。

我发现了很多类似的帖子,但没有一个真正回答这个问题。

在RavenDB中修改嵌套集合中的特定项

查看我们如何在RaccoonBlog中做到这一点:https://github.com/ayende/RaccoonBlog/blob/master/RaccoonBlog.Web/Infrastructure/Tasks/AddCommentTask.cs