感谢您光临:)
基本上,我有一个 MongoDB,其中包含具有以下属性的文档集合:
String group;
String key;
String value;
DateTime timestamp;
Run Code Online (Sandbox Code Playgroud)
我想获得所有最新文档的列表,这些文档具有唯一(不同)的组和键组合。
存在具有相同组和键但值不同的文档;我只想要具有最新时间戳的那个。
所以如果我有:
文档 A:组 = 2;键 = 某物;值 = 123;时间戳 = 20160621;
文件 B:组 = 2;键 = 某物;值 = 888;时间戳 = 20160622;
我只想在查询中检索文档 B(值为 888)。
这是我到目前为止得到的:
var aggregate = collection.Aggregate()
.Match(new BsonDocument { { "deviceid", deviceid } })
.Sort( new BsonDocument { { "timestamp", -1} })
.Group(new BsonDocument { { "groupkey", "$group" }, { "latestvalue", "$first.value" } });
Run Code Online (Sandbox Code Playgroud)
然而,这会导致以下异常:“命令聚合失败:组聚合字段‘groupkey’必须定义为对象内的表达式”
1)关于如何使用聚合来做我想做的事情的任何提示?(基本上,按 timstamp 降序排序,并根据 2 个字段进行区分)
2)关于如何将聚合转换为列表或类似的任何提示?(我需要在所有结果上使用 linq 来查找具有特定组和键的文档的值)
使用聚合框架时,作为培训的一部分,我建议在 monogo shell/robomongo 中执行相同的操作以查看正确的语法。
请在下面找到查询的固定语法
var aggregate = collection.Aggregate()
.Match(x=>x.key== "k10")
.SortByDescending(x=>x.timestamp)
.Group( BsonDocument.Parse("{ '_id':'$group', 'latestvalue':{$first:'$value'} }")).ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5844 次 |
| 最近记录: |