從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#。任何幫助,將不勝感激。
嘗試使用'.SelectMany(...)'。 – Enigmativity
我看不到任何代碼,你在使用'SelectMay'。請包括將您的問題*複製到您的問題*所需的所有信息。當你的問題的任何修訂版本中的評論和你的實際代碼和解釋/錯誤都不相同時,特別難以理解你的意思。 – HimBromBeere
我編輯的問題 – Ktt