gpt4 book ai didi

ravendb - 如何使用 Raven LoadDocument

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

我在查询 RavenDB 时遇到了问题,即使是最简单的查询,可能我做错了什么,但几个小时后我就看不到它了。我用谷歌搜索了几乎所有我能想到的东西..

我有这些实体:

    public class User
{
public string Id { get; set; }
public string DisplayName { get; set; }
public string RealName { get; set; }
public string Email { get; set; }
public string PictureUri { get; set; }
public List<Comment> Comments { get; set; }

public List<Role> Roles { get; set; }
}

public class NewsItem
{
public string Id { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public DateTime Created { get; set; }
public string UserId { get; set; }
public List<Tag> Tags { get; set; }
public List<Comment> Comments { get; set; }
public List<WebImage> Images { get; set; }
}

我想查询这些,以便获得新闻项目列表,但旁边还有用户信息。所以我阅读了文档并尝试了 LoadDocument 功能,索引:

public class NewsItemIndexWithComments : AbstractIndexCreationTask<NewsItem, NewsItemIndexWithComments.Result>
{

public class Result
{
public string AuthorName { get; set; }
}

public NewsItemIndexWithComments()
{
Map = newsItems => from newsItem in newsItems
select new
{
AuthorName = LoadDocument<User>(newsItem.UserId).DisplayName
};
}
}

我尝试使用如下:

var result = _documentSession.Query<NewsItemIndexWithComments.Result, NewsItemIndexWithComments>().AsProjection<NewsItemIndexWithComments.Result>().ToList();

现在我得到了列表中的文档数量,但 AuthorName 始终为空。如果我不使用 AsProjection 方法,我将不会得到任何结果。谁能给我展示一个可以进一步实验的正确示例?

谢谢。

_编辑:

这很有帮助,谢谢:)现在第二步,如果我有点新手,我很抱歉,但你必须从某个地方开始。在新闻站点中有评论,在这些评论中还有另一个对用户 ID 的引用。您可能会猜到我想做什么:我还想要评论的用户信息和评论。

新索引:

public class NewsItemIndexWithComments : AbstractIndexCreationTask<NewsItem, NewsItemIndexWithComments.Result>
{

public class Result : NewsItem
{
public string AuthorName { get; set; }
public string AuthorId { get; set; }

}

public NewsItemIndexWithComments()
{
Map = newsItems => from newsItem in newsItems
let user = LoadDocument<User>(newsItem.UserId)
select new
{
AuthorName = user.DisplayName,
AuthorId = user.Id,
};
Store(x => x.AuthorName, FieldStorage.Yes);
Store(x => x.AuthorId, FieldStorage.Yes);
}
}

评论类:

public class Comment
{
public string Id { get; set; }
public string Text { get; set; }
public string UserId { get; set; }
public string User { get; set; }
public DateTime Created { get; set; }
}

如何查询评论并扩展结果?或者只为评论创建一个新索引并获取类似于上述解决方案的用户信息是否更好?

最佳答案

你已经快完成了,你只需要存储你正在投影的字段即可。将其添加到索引构造函数中的 map 之后。

Store(x=> x.AuthorName, FieldStorage.Yes);

这是因为您希望它返回并可供 AsProjection 查找。如果您只想在 where 或 orderby 中使用作者姓名,则不需要它。

关于ravendb - 如何使用 Raven LoadDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15235723/

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