如何在MongoDB C#Driver中获得结果的子集?
我有一个版本化文档集(“rHistory”),其结构如下:如何在MongoDB C#Driver中获得结果的子集?,c#,mongodb,aggregation-framework,aggregate,mongodb-.net-driver,C#,Mongodb,Aggregation Framework,Aggregate,Mongodb .net Driver,我有一个版本化文档集(“rHistory”),其结构如下: { "rid": "123e", "v": 1 }, { "rid": "143fe", "v": 1 }, { "rid": "143fe", "v": 2 }, { "rid": "143fe", "v": 3 }, {
{
"rid": "123e",
"v": 1
},
{
"rid": "143fe",
"v": 1
},
{
"rid": "143fe",
"v": 2
},
{
"rid": "143fe",
"v": 3
},
{
"rid": "123e",
"v": 2
}
我正在编写一个函数来返回此集合中文档的子集。目前,我发现所有匹配项如下:
\u rhistore.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());
}
假设您的模型如下所示:
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();
你的东西怎么了?@Mahdi在内存中被执行
{ "$group" : { "_id" : "$rid", "v" : { "$max" : "$v" } }