使用dotnet驱动程序执行mongo聚合查询

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

我需要在dotnet应用程序中执行此查询mongodb。查询返回许多文档。

db.mycollection.aggregate(
[  
    { $match : { tipo:"user_info" } } ,
    {$group: { 
         _id: {userKey: "$userKey", appId:"$appId"} ,
         uniqueIds: {$addToSet: "$_id"},
         count: {$sum: 1}
        }
        },
    {$match: { 
        count: {"$gt": 1}
        }
    }
]);

我试过这个,但它返回0个文档。

var result = collection.Aggregate()
            .AppendStage<BsonDocument>
            (
                new BsonDocument { { "$match", new BsonDocument("tipo", "user_info") } }
            )
            .AppendStage<BsonDocument>
            (
                new BsonDocument { { "$group", new BsonDocument("_id", "{userKey: \"$userKey\", appId:\"$appId\"}")
                .Add("uniqueIds", new BsonDocument("$addToSet", "$_id"))
                .Add("count", new BsonDocument("$sum", "1"))} }
            )
            .AppendStage<BsonDocument>
            (
                new BsonDocument { { "$match", new BsonDocument("count", new BsonDocument("$gt", 1)) } }
            ).ToList();
c# .net mongodb aggregation-framework mongodb-.net-driver
1个回答
0
投票

这里的问题是你错误地为_id阶段定义了你的$group。 MongoDB驱动程序将其解释为字符串:

{ "$group" : { "_id" : "{userKey: \"$userKey\", appId:\"$appId\"}", "uniqueIds" : { "$addToSet" : "$_id" }

要修复它你可以嵌套另一个BsonDocument像:

.AppendStage<BsonDocument>
        (
            new BsonDocument { { "$group", new BsonDocument("_id",
                new BsonDocument() { { "userKey", "$userKey" }, { "appId", "$appId" } })
            .Add("uniqueIds", new BsonDocument("$addToSet", "$_id"))
            .Add("count", new BsonDocument("$sum", 1))} }
        )

这将被翻译为:

{ "$group" : { "_id" : { "userKey" : "$userKey", "appId" : "$appId" }, "uniqueIds" : { "$addToSet" : "$_id" }
© www.soinside.com 2019 - 2024. All rights reserved.