数组中的foreach项使用mongodbcsharp驱动程序查找最大记录

时间:2016-07-11 09:48:25

标签: mongodb-.net-driver

假设有一个类似的文件:

{
    "_id": "1cf2080c-ce9a-367b-93ba-dbf7b2bf8a2c",
    "template_id" : "1cf2080c-ce9a-367b-93ba-dbf7b2bf8a2c",
    "some_value" : 12
}

映射到类Template,并给出一个templateid数组array_id = ["aa", "bb", "cc"]

问题:如何使用mongodb C#driver2.1 up获取Template列表,列表中的每个项目都有some_value

例如有一个集合:

{"_id": "1", "template_id": "aa", "some_value":1}

{"_id": "2", "template_id": "aa", "some_value":2}

{"_id": "3", "template_id": "aa", "some_value":3}

{"_id": "4", "template_id": "bb", "some_value":4}

{"_id": "5", "template_id": "bb", "some_value":5}

template_id_array = ["aa", "bb"]

期待结果是:

{"_id": "3", "template_id": "aa", "some_value":3}

{"_id": "5", "template_id": "bb", "some_value":5}

我认为这将是一些"聚合"或" map-reduce"比如过程,第一个匹配结果,然后按模板ID分组,然后找到每个组的最大值。

1 个答案:

答案 0 :(得分:0)

我没有对此进行过测试,但应该进行一些可能的修改

var result = new List<Template>();
foreach (var element in template_id_array)
{
    var filter = builder.Eq("TemplateId", element);
    var doc = await collection.Find(filter)
    .SortByDescending(x => x.SomeValue)
    .Limit(1)
    .FirstOrDefaultAsync();
    result.Add(doc);
}

然后你可以将它序列化为最终形式:

var expectedResult = JsonConvert.SerializeObject(result);
相关问题