最近我已经从mongosharp 1.8迁移到2.0。我面临的唯一问题是日期字段的聚合。让我向您展示如何构造查询:
var aggregateResult = Items.Aggregate()
.Group(
g => new {
// some fields
Day = g.DateTime.DayOfYear
},
z => new {
MyKey = z.Key
// agrregation functions
})
.Project(
d => new {
// projection for other fields
d.MyKey.Day
});
我使用了this中的documentation示例。
我遇到以下异常:No matching creator found.
我已经检查了生成的查询并手动执行了它-结果完美。再现测试代码并与我比较之后,我发现问题出在日期上。因此,有人可以指出我正确的日期语法/查询规则吗?下面生成的查询证明查询是正确的。
aggregate(
[
{
"$group" : {
"_id" : {
"Day" : {
"$dayOfYear" : "$DateTime"
}
},
}
},
{
"$project" : {
"Day" : "$_id.Day",
"_id" : 0
}
}
])
解决方法
因此,为了使事情正常,我执行下一个解决方法:
下面是获取集合并执行查询的代码
_collection = new MongoDatabase(new MongoServer( MongoServerSettings.FromUrl(connectionString)), databaseName, new MongoDatabaseSettings()).GetCollection<MyClass>("collection_name");
var pipeline = new[] { match, groupBy, project, .... };
_collection.Aggregate(new AggregateArgs { Pipeline = pipeline }).ToList()
当数据库中不存在您要获取的元素时,就会发生错误。在这种情况下,mongo驱动程序似乎对应将生成的匿名类型生成为哪种“类型”感到困惑。
我将匿名类型更改为具体类型(通过为其声明一个类),并修复了该错误。