2

在 RavenDB 我的文档 (ID = 1234) 是

   "datacontainer": {
      "data": [
        {
          "@idx": "1",
          "@idy": "a",
          "value": {
            "#text": "test 2010"
          }
        },
        {
          "@idx": "2",
          "@idy": "b",
          "value": {
            "#text": "test 2011"
          }
        },
        {
          "@idx": "3",
          "@idy": "c",
          "value": {
            "#text": "test 2012"
          }
        }
      ]
   }

我想创建一个索引,在其中选择我最喜欢的值(例如idx = "2"idy = "b"),输出将是:

(ID, value_text) = (1234, "test 2011")

现在我可以选择一个元素并在 Linq 中检查它的值:

where p.datacontainer.data[0]["@idx"] == "2" && p.datacontainer.data[0]["@idy"] == "b"

如何在列表中搜索正确的元素?

4

2 回答 2

0

Luigi,在 RavenDB 中,您不搜索列表值,而是搜索具有与您的查询匹配的给定文档的文档。

就您而言,您的实体是什么样的?

于 2012-10-10T08:06:24.127 回答
0

我解决了我的问题!在 RavenDB 中,名为“MyIndex”的索引是:

地图:

from p in docs
select new  
{  Id = p.id, 
   M = p.dataApplication.datacontainer.data.Where(x => x["@idx"] == "2").First(x => x["@idy"] == "b").value["#text"] 
};

减少:

 from test in results
 group test by new {test.Id, test.M   } into g
 select new { g.Key.Id, g.Key.M }

现在我可以在查询中使用此索引,因此我将搜索包含特定值的文档,例如:

 var results = from p in session.Query<QueryResult>("MyIndex")
               where p.M == "test 2011"
               select p;

也许有更好的解决方案,但现在可以了!

于 2012-10-10T09:14:24.967 回答