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"and idy = "b") を選択すると、出力は次のようになります。

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

これで、1 つの要素を選択して、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 に答える