未找到匹配的创建者

问题描述 投票:7回答:1

最近我已经从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
        }
    }
])

解决方法

因此,为了使事情正常,我执行下一个解决方法:

  • 创建聚合帮助程序类,该类使用旧版程序集封装对数据库的访问。
  • 使用在bson文档上构建的查询的实现方法
  • 将其注入我的异步2.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()
c# mongodb aggregation-framework mongodb-.net-driver
1个回答
0
投票
我今天遇到此错误。与询问该问题的人类似,我在mongo查询中填充了一个匿名类型。

当数据库中不存在您要获取的元素时,就会发生错误。在这种情况下,mongo驱动程序似乎对应将生成的匿名类型生成为哪种“类型”感到困惑。

我将匿名类型更改为具体类型(通过为其声明一个类),并修复了该错误。

© www.soinside.com 2019 - 2024. All rights reserved.