如何在 MongoDB C# 驱动程序中获取结果子集?
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
}
我正在为 return 此集合中文档的子集编写一个函数。目前我找到所有匹配项如下:
_rHistory.Find(r => rIds.Contains(r.RId)).ToList()
但是,我只想 return 每个结果的最高版本项,如下所示:
{
"rid": "143fe",
"v": 3
},
{
"rid": "123e",
"v": 2
}
我如何才能找到每个文档的最新版本匹配 rid 上的过滤器,并且 return 结果作为列表?我假设涉及聚合,但我无法找到相关示例。显然我不想这样做:
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
和 return .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" } }
我有一个版本化文档集合 ("rHistory"),结构如下:
{
"rid": "123e",
"v": 1
},
{
"rid": "143fe",
"v": 1
},
{
"rid": "143fe",
"v": 2
},
{
"rid": "143fe",
"v": 3
},
{
"rid": "123e",
"v": 2
}
我正在为 return 此集合中文档的子集编写一个函数。目前我找到所有匹配项如下:
_rHistory.Find(r => rIds.Contains(r.RId)).ToList()
但是,我只想 return 每个结果的最高版本项,如下所示:
{
"rid": "143fe",
"v": 3
},
{
"rid": "123e",
"v": 2
}
我如何才能找到每个文档的最新版本匹配 rid 上的过滤器,并且 return 结果作为列表?我假设涉及聚合,但我无法找到相关示例。显然我不想这样做:
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
和 return .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" } }