C# Mogodb使用c通过条件和聚合组#
我有一个包含以下示例数据的成员集合C# Mogodb使用c通过条件和聚合组#,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我有一个包含以下示例数据的成员集合 { "_id" : ObjectId("50f6632d89862009f4c80e0f"), "_Ten" : ObjectId("50f6632d89862009f4c80e0e"), "active" : true, "role" : "Administrator", "_t" : "User" } { "_id" : ObjectId("50fe895678415503d022945f"), "_Ten" : ObjectId("50f6632d898
{ "_id" : ObjectId("50f6632d89862009f4c80e0f"), "_Ten" : ObjectId("50f6632d89862009f4c80e0e"), "active" : true, "role" : "Administrator", "_t" : "User" }
{ "_id" : ObjectId("50fe895678415503d022945f"), "_Ten" : ObjectId("50f6632d89862009f4c80e0e"), "active" : true, "role" : "Contributor", "_t" : "User" }
{ "_id" : ObjectId("51013a6c7841550820ad7945"), "_Ten" : ObjectId("51013a6c7841550820ad7944"), "active" : true, "role" : "Administrator", "_t" : "User" }
我需要通过“\u十”找到不同类型用户组的总和
我在robomongo中编写了以下查询,并得到了结果
db.getCollection('Member').aggregate(
[
{
$match:
{
$and: [
{
"active": true
},
{
"_t": "User"
}
]
}
},
{
"$group":
{
"_id": "$_Ten",
"administrators":
{
"$sum":
{
"$cond": [
{
$eq: ["$role", "Administrator"]
}, 1, 0]
}
},
"contributers":
{
"$sum":
{
"$cond": [
{
$eq: ["$role", "Contributor"]
}, 1, 0]
}
},
"visitors":
{
"$sum":
{
"$cond": [
{
$eq: ["$role", "Visitor"]
}, 1, 0]
}
}
}
}
]
)
但是我需要使用c#得到结果,所以在c#中,我尝试了以下方法
criteriaFilter = Builders<BsonDocument>.Filter.Eq("active", true);
query = query & criteriaFilter;
criteriaFilter = Builders<BsonDocument>.Filter.Eq("_t", "User");
query = query & criteriaFilter;
criteriaFilter = Builders<BsonDocument>.Filter.In<ObjectId>("_Ten", tenantIds.Select(tenantId => new ObjectId(tenantId)));
query = query & criteriaFilter;
var results = memberCollection.Aggregate()
.Match(query)
.Group(BsonDocument.Parse("{ \"$group\" : { \"_id\" : \"$_Ten\", \"administrators\" : { \"$sum\" : { \"$cond\": [{ $eq: [ \"$role\", \"Administrator\"]}, 1, 0]}}, \"contributers\" : { \"$sum\" : { \"$cond\": [{ $eq: [ \"$role\", \"Contributor\"]}, 1, 0]}}, \"visitors\" : { \"$sum\" : { \"$cond\": [{ $eq: [ \"$role\", \"Visitor\"]}, 1, 0]}}}}"))
.ToList();
criteriaFilter=Builders.Filter.Eq(“活动”,真);
query=query&criteriaFilter;
criteriaFilter=Builders.Filter.Eq(“\u t”,“User”);
query=query&criteriaFilter;
criteriaFilter=Builders.Filter.In(“_-Ten”,tenantId.Select(tenantId=>newobjectid(tenantId));
query=query&criteriaFilter;
var results=memberCollection.Aggregate()
.Match(查询)
(b)组(bsondoc。解析(以下)组(b)组(b)提交文件。解析(以下)组(b)组(b)组(b)组(b)组(b)提交文件。组(b)组(b)组(b)提交文件。层(b)组(b)组(b)提交文件。组(以下)组)解析(以下)组(以下::““““““““,,,,,,,”(以下)组(以下)组)组)组(以下)组)组)组(以下)组)组)组(以下)组)组)组)组(以下)组)组)组)组(层(层(以下)组)组)组)组)组)组)组(层(层(层(层(b)组)组)组)组)组)层(层(层(层(层(b)组)组)组)组)层(b)组)组)会(层(层(b)组)的)}}}}“))
.ToList();
出现错误“命令聚合失败:字段“$group”必须是累加器对象”
我需要帮助为上面提到的mongo查询创建c#查询。通过使用以下代码在c中转换我的mongo查询,解决了这个问题#
var results=memberCollection.Aggregate()
.Match(查询)
.组(新的B文档()
{
{“\u id”,“$\u Ten”},
{“管理员”,
新的B文件(
“$sum”,
新的BsonDocument(“$cond”,BsonSerializer.Deserialize(“[{$eq:[
\“$role\”,“'Administrator\']},1,0]”))},
{“贡献者”,
新的B文件(
“$sum”,
新的BsonDocument(“$cond”,BsonSerializer.Deserialize(“[{$eq:[
\“$role\”,“'Contributor\”]},1,0]”))},
{“访客”,
新的B文件(
“$sum”,
新的BsonDocument(“$cond”,BsonSerializer.Deserialize(“[{$eq:[
\“$role\”,\“Visitor\”]},1,0]”))}
}).ToList();
解决了问题,尝试了以下操作,结果是var results=memberCollection.Aggregate().Match(query).Group(新BsonDocument(){{{{u id',“$\u Ten”},{“administrators”,新BsonDocument($sum),新BsonDocument($cond),BsonSerializer.Deserialize('[{$eq:[\“$role\”,\'Administrator\“]},1,0]”))}};
var results = memberCollection.Aggregate()
.Match(query)
.Group(new BsonDocument()
{
{ "_id", "$_Ten" },
{ "administrators",
new BsonDocument(
"$sum",
new BsonDocument("$cond", BsonSerializer.Deserialize<BsonArray>("[{ $eq: [
\"$role\", \"Administrator\"]}, 1, 0]") ))},
{ "contributors",
new BsonDocument(
"$sum",
new BsonDocument("$cond", BsonSerializer.Deserialize<BsonArray>("[{ $eq: [
\"$role\", \"Contributor\"]}, 1, 0]") ))},
{ "visitors",
new BsonDocument(
"$sum",
new BsonDocument("$cond", BsonSerializer.Deserialize<BsonArray>("[{ $eq: [
\"$role\", \"Visitor\"]}, 1, 0]") ))}
}).ToList();