Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MongoDB C#Driver中获得结果的子集?_C#_Mongodb_Aggregation Framework_Aggregate_Mongodb .net Driver - Fatal编程技术网

如何在MongoDB C#Driver中获得结果的子集?

如何在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 }, {

我有一个版本化文档集(“rHistory”),其结构如下:

    {
        "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" } }