【问题标题】:Raven DB Count QueriesRaven DB 计数查询
【发布时间】:2020-11-14 22:15:54
【问题描述】:

我需要获取特定集合中的文档计数:

现有索引 Raven/DocumentCollections 存储集合的计数和名称与属于集合的实际文档配对。如果可能的话,我想从这个索引中获取计数。

这是 Raven/DocumentCollections 索引的 Map-Reduce:

from doc in docs
let Name = doc["@metadata"]["Raven-Entity-Name"]
where Name != null
select new { Name , Count = 1}

from result in results
group result by result.Name into g
select new { Name = g.Key, Count = g.Sum(x=>x.Count) }

附带说明,var Count = DocumentSession.Query<Post>().Count(); 总是返回 0 作为我的结果,尽管很明显我的数据库中有 500 个奇怪的文档,其中至少 50 个在其元数据“Raven-Entity-Name”中作为“帖子” .我完全不知道为什么这个 Count 查询一直返回 0 作为答案 - Raven 日志会在 Count 完成时显示这一点

Request # 106: GET     -     0 ms - TestStore  - 200 - /indexes/dynamic/Posts?query=&start=0&pageSize=1&aggregation=None

【问题讨论】:

    标签: ravendb


    【解决方案1】:

    对于仍在寻找答案的任何人(此问题于 2011 年发布),现在执行此操作的适当方法是:

    var numPosts = session.Query<Post>().Count();
    

    【讨论】:

    • ... 或者如果您的会话是异步的: var numPosts = session.Query().CountAsync();
    【解决方案2】:

    要从索引中获取结果,可以使用:

    session.Query<Collection>("Raven/DocumentCollections")
           .Where(x=>x.Name == "Posts")
           .FirstOrDefault();
    

    这会给你想要的结果。

    【讨论】:

    • 这对我很有帮助,谢谢,我尝试使用:from Collection collection in session.Query("Raven/DocumentCollections") where collection.Name = "帖子”选择集合。计数并遇到各种错误。
    • WORKS : var Count = DocumentSession.Query("Raven/DocumentCollections").Where(X => X.Name == "Posts").FirstOrDefault().Count;不工作: var Count = (from collection in DocumentSession.Query("Raven/DocumentCollections") where collection.Name == "Posts" select collection.Count).First();在 c:\Builds\raven\Raven.Client.Lightweight\Document\AbstractDocumentQuery.cs:line 1262 中的 Raven.Client.Document.AbstractDocumentQuery`2.Deserialize(JObject 结果) 和 .. 中引发 NullReferenceException
    • “集合”定义在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多