2017-08-08 28 views
0

從mongo示例中,假設我們有一個這樣的集合;是否可以投影子數組並將它們檢索爲一個數組?

{ "_id" : 1, "semester" : 1, "grades" : [ 70, 87, 90 ] } 
{ "_id" : 2, "semester" : 1, "grades" : [ 90, 88, 92 ] } 
{ "_id" : 3, "semester" : 1, "grades" : [ 85, 100, 90 ] } 
{ "_id" : 4, "semester" : 2, "grades" : [ 79, 85, 80 ] } 
{ "_id" : 5, "semester" : 2, "grades" : [ 88, 88, 92 ] } 
{ "_id" : 6, "semester" : 2, "grades" : [ 95, 90, 96 ] } 

然後查詢是這樣的;

db.students.find({ semester: 1, grades: { $gte: 85 } }, 
        { "grades.$": 1 }) 

這樣的結果;

{ "_id" : 1, "grades" : [ 87 ] } 
{ "_id" : 2, "grades" : [ 90 ] } 
{ "_id" : 3, "grades" : [ 85 ] } 

我想得到一個像這樣的結果;

{"grades": [87, 90, 85]} 

在一個陣列上。我執行的代碼給了我一個LogLists數組,代碼與上面不同,但操作是完全相同的;

var result = collectionServerName.Find(x => x.LogList.Any(p => p.Ip.Contains("192"))) 
    .Project(Builders<ServerName>.Projection.Exclude("_id").Include("LogList")) 
    .ToList(); 

我試過下面的代碼;

var result = collectionServerName.Find(x => x.LogList.Any(p => p.Ip.Contains("192"))).Project(t => t.LogList.SelectMany(k => k)).ToList(); 

,但它讓我對以下的SelectMany編譯錯誤

The type arguments for method 'Enumerable.SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly 

如果我只用選擇;

var result = collectionServerName.Find(x => x.LogList.Any(p => p.Ip.Contains("192"))).Project(t => t.LogList.Select(k => k)).ToList(); 

結果類型是List<IEnumarable<Log>>,我不打算有

爲什麼我需要爲一個數組是我檢索它們之前分頁結果的原因。我正在使用C#。任何幫助,將不勝感激。

+0

嘗試使用'.SelectMany(...)'。 – Enigmativity

+1

我看不到任何代碼,你在使用'SelectMay'。請包括將您的問題*複製到您的問題*所需的所有信息。當你的問題的任何修訂版本中的評論和你的實際代碼和解釋/錯誤都不相同時,特別難以理解你的意思。 – HimBromBeere

+0

我編輯的問題 – Ktt

回答

0

這對於c#來說怎麼樣?

對於所有級別在一個可枚舉

收集 .AsQueryable() .SelectMany(X => x.grades);

而對於分頁只是添加跳過(10),採取(10)擴展方法。

+0

似乎工作。謝謝! – Ktt

相關問題