gpt4 book ai didi

c# - Mongodb 聚合组然后条件总和使用 c#

转载 作者:可可西里 更新时间:2023-11-01 10:02:06 24 4
gpt4 key购买 nike

我有一个包含以下示例数据的成员集合

{ "_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" }

我需要通过“_Ten”找到不同类型用户组的总和我在 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();

给出错误“命令聚合失败:字段‘$group’必须是一个累加器对象”

我需要帮助为上面提到的我的 mongo 查询创建 c# 查询。

最佳答案

通过使用以下代码在 c# 中转换我的 mongo 查询,解决了这个问题

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();

关于c# - Mongodb 聚合组然后条件总和使用 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49939943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com