gpt4 book ai didi

RavenDB 查询 ID

转载 作者:行者123 更新时间:2023-12-02 00:33:29 25 4
gpt4 key购买 nike

我有一个名为 Post 的模型,它有一个名为 Slug 的字段。我用属性 [ID] 标记了这个字段,并更改了 RavenDB 中的 FindIdentityProperty 约定,这样它就将标有 [ID] 的属性视为文档的标识。

现在我想获取所有包含以字符 G 开头的 slug 的帖子,我是否需要创建这样的索引:

from Post in docs.Posts
select new { Slug = Post.Slug }

或者像这样

from Post in docs.Posts
select new { Id = Post.Id }

或者我是否使用 RavenDB 内部应该拥有的索引,因为我正在查询 ID。我知道 RavenDB 在某处索引了 ID 属性,因此 Session.Load<Post>("SomeID")是可能的。

第一个选项可以在 C# 的代码中定义为 AbstractIndexCreationTask,因为 C# 理解 Slug 是 Post 的一个字段,但它不起作用,因为它像这样“字符串”化到 RavenDB 中:(当索引创建发生时)

from Post in docs.Posts
select new { Slug = Post.Slug }

成为

docs.Posts
.Select(Post => new {Slug = Post.Slug })

创建索引后,您可以在 SL-UI 中看到这一点。

这确实起作用,因为(如数据库的 SL-UI 中所示)Post 的 JSON 表示,没有像 "Slug":"Some-Slug" 这样的名称-值对.因为它是显示在文档上方的 ID,在@metadata 中它可以被视为 _document_id

的值

后者确实有效,但只有在定义为字符串时才有效,就像 C# 中的这样

public class Post_ById : AbstractIndexCreationTask
{
public override IndexDefinition CreateIndexDefinition()
{
return new IndexDefinition
{
Map = "from Post in docs.Posts select new { Id = Post.Id}"
};
}
}

我怀疑当 Raven 收到包含字符串“Id”的查询时,它会自动认为它是对 [@metadata][_document_id] 的查询。

这里没有 LINQ 优点 - 看起来很脆弱,无法在域名重构后存活下来。 Id 不是 Post 的一个字段,但是这个索引确实允许我做我想做的事情,即“获取所有包含以字符 G 开头的 slug 的帖子” .当 DB 应该已经有这样的索引时,我讨厌为 ID 定义索引。

最佳答案

嗯,我们实际上也在 AbstractIndexCreationTask 中使用了相同的约定,所以这应该可行。无论如何,始终可以使用 __document_id 访问文档的 id

关于RavenDB 查询 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5688767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com