簡體   English   中英

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

我正在編寫 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM