[英]How can I get a subset of results in MongoDB C# Driver?
我有一個版本化文檔(“rHistory”)的集合,具有以下結構:
{
"rid": "123e",
"v": 1
},
{
"rid": "143fe",
"v": 1
},
{
"rid": "143fe",
"v": 2
},
{
"rid": "143fe",
"v": 3
},
{
"rid": "123e",
"v": 2
}
我正在編寫 function 以返回此集合中文檔的子集。 目前我發現所有匹配的項目如下:
_rHistory.Find(r => rIds.Contains(r.RId)).ToList()
但是,我只想返回每個結果的最高版本項,如下所示:
{
"rid": "143fe",
"v": 3
},
{
"rid": "123e",
"v": 2
}
如何在 rid 上找到與過濾器匹配的每個文檔的最新版本並將結果作為列表返回? 我假設涉及聚合,但我無法找到相關示例。 顯然我寧願不這樣做:
foreach (var rId in rIds)
{
res.Add(_rHistory.Find(r => r.RId == rId).SortByDescending(f => f.Version).FirstOrDefault());
}
假設您的 model 看起來像這樣:
public class Model
{
public ObjectId Id { get; set; }
public string rid { get; set; }
public int v { get; set; }
}
您可以按rid
分組並返回.Max()
v
:
var col = database.GetCollection<Model>("rHistory");
var q = col.Aggregate()
.Group(
x => x.rid,
gr => new {rid = gr.Key, v = gr.Max(f => f.v)});
var result = q.ToList();
MongoDB .NET 驅動程序會將此類查詢轉換為:
{ "$group" : { "_id" : "$rid", "v" : { "$max" : "$v" } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.