我需要在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();
答案 0 :(得分: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" }