簡體   English   中英

如何在 C# Mongo Driver 中使用 $facet 進行以下查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM