[英]execute mongo aggregation query using dotnet driver
我需要在dotnet应用程序上执行此查询mongo。 查询返回许多文档。
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();
这里的问题是您没有为$group
阶段定义_id
。 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" }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.