在RavenDB中处理带有点的前缀

本文关键字:前缀 RavenDB 处理 | 更新日期: 2023-09-27 18:05:12

我已经开始在c#项目中使用RavenDB。我有结构为:

的文档
{
  "MessageId": "8c34dec8-e6fe-6bee-2dc6-2cf83e374090",
  "Headers": {
    "Header.MessageId": "14f6cdf3-142d-4ab0-9610-a65600f1f460",
    "Header.Timestamp": "2016-08-02 12:40:55:783130 Z",
    "$.diagnostics.host": "1ddc6cefd4d776f1de8fefc33a45d020",
  },
  "Timestamp": "2016-08-02T12:43:25.3914940Z"
}

我可以通过MessageId:

获取文档
var doc = session.Query<Messages>().Where(w => w.MessageId == "8c34dec8-e6fe-6bee-2dc6-2cf83e374090").ToList();

但是我想通过:Headers.Header.MessageId获取文档。不幸的是,在Header中有前缀键(Header和$),我不知道如何在session.Query<Messages>()语句中处理它。

我可以在RavenDB Studio中这样做:

from doc in docs.Messages
where doc.Headers["Header.MessageId"] == "14f6cdf3-142d-4ab0-9610-a65600f1f460"
select new { 
    Id = doc.MessageId,
    MessageId = doc.Headers["Header.MessageId"]
}

我试图创建Lucene查询,但它不工作:

var doc = session.Advanced.LuceneQuery<object>().WhereEquals("Headers.Header.MessageId", "14f6cdf3-142d-4ab0-9610-a65600f1f460").ToList();

你能告诉我我做错了什么并帮助我吗?

在RavenDB中处理带有点的前缀

您的文档是与管理创建的吗?因为你的文档不能在。net类中表示(也可以通过Messages表示)(你不能有带点的属性名),这意味着你不能加载文档;你需要修补文档(删除点)