2012-10-09 61 views
2

在RavenDB我的文檔(ID = 1234)是如何在Json-Linq中的RavenDB索引中選擇屬性?

"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" 

如何搜索合適的eleme nt在我的列表中?

回答

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; 

也許有更好的解決方案,但現在它的工作!

0

路易吉, 在RavenDB,你不搜索列表值,您正在尋找與給定文件,你必須與查詢匹配的文檔。

就你而言,你的實體是什麼樣的?

相關問題