假设有一个类似的文件:
{
"_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分组,然后找到每个组的最大值。
答案 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);