[英]How to use $facet in C# Mongo Driver for following query?
我想在我的數據上創建一個聚合,以獲取帶有特定標簽的項目總數,用於 my.Net 應用程序中的項目集合。
let type = 1
let dataPipeline = [];
dataPipeline = dataPipeline.concat([{
"$match": {
$and: [{
"basicDetails.isDeleted": 0
},
{
"basicDetails.type": type
}
]
},
},
{
"$lookup": {
from: "ProjectStatusTheme",
localField: "id",
foreignField: "basicDetails.status.id",
as: "statusColorMapping"
}
},
{
"$facet": {
"totalProjectsCount": [{
"$group": {
"_id": {
"Status": {
"id": -1,
"name": "Total Projects",
},
"Color": {
"$arrayElemAt": ["$statusColorMapping.color", {
"$indexOfArray": ["$statusColorMapping.id", -1]
}]
},
},
"count": {
"$sum": 1
}
}
}],
"countByStatus": [{
"$group": {
"_id": {
"Status": "$basicDetails.status",
"Color": {
"$arrayElemAt": ["$statusColorMapping.color", {
"$indexOfArray": ["$statusColorMapping.id", "$basicDetails.status.id"]
}]
}
},
"count": {
"$sum": 1
},
}
},
{
$sort: {
_id: 1
}
}
]
}
}
]);
我想使用 MongoDB C# 驅動程序中的聚合框架在.Net 中運行上述查詢。 我可以在 .net 中運行匹配和查找,如下所示:
var match1 = new BsonDocument {
{
"$match",
new BsonDocument {
{
"basicDetails.isDeleted",
0
}, {
"basicDetails.type",
Int16.Parse(type)
}
}
}
};
var lookup1 = new BsonDocument {
{
"$lookup",
new BsonDocument {
{
"from",
"ProjectStatusTheme"
}, {
"localField",
"id"
}, {
"foreignField",
"basicDetails.status.id"
}, {
"as",
"statusColorMapping"
}
}
}
};
var pipeline = new [] {
match1,
lookup1
};
var result2 = projectsCollection.Aggregate < BsonDocument > (pipeline);
但是,我無法將 $facet 轉換為 Mongo 的 .NET C# 驅動程序。 如何使用 .NET C# 驅動程序執行此操作?
您可以通過以下方式使用任何有效BsonDocument
階段: BsonDocument.Parse("valid_bson_document_string")
,因此在您的情況下它將是:
var pipeline = new [] {
match1,
lookup1,
BsonDocument.Parse("facet_stage")
};
var result = coll.Aggregate<BsonDocument>(pipeline);
此外,您可以在此處找到有關如何配置類型化(和其他)方面階段的示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.