将 MongoDb 查询转换为 MongoDriver .Net 核心

Translating MongoDb query to MongoDriver .Net core

我正在尝试将以下 MongoDb 命令转换为 MongoDriver for .Net Core 中的等效命令:

 db.test.aggregate([
  { 
     $project: {
        values: {
          $map: {
            input: { $objectToArray: "$foo" },
            as: "val",
            in: "$$val.v.value"
          }
        }
     }
  }
]);

但是我很难理解这些文档,因为我看到很多对我的编译器找不到的类型的引用(比如 AggregateArgs)。使用 C# 语法表达它的最佳方式是什么?

试试这个:

            var projectStage = BsonDocument.Parse(@"
        {
            'values' : {
                '$map' : {
                    'input' : {
                        '$objectToArray' : '$foo'
                    },
                    'as': 'val',
                    'in': '$$val.v.value'
                }
        }}");
        var coll = new MongoClient().GetDatabase("db").GetCollection<BsonDocument>("coll");
        var res = coll
            .Aggregate()
            .Project(projectStage)
            .ToList();

生成的投影查询将是:

{
"$project": {
    "values": {
        "$map": {
            "input": {
                "$objectToArray": "$foo"
            },
            "as": "val",
            "in": "$$val.v.value"
        }
    }
}
}

不幸的是,$objectToArray 目前不支持通过类型化方式。您可以在此处找到使用类型化方式和 LINQ 的类似查询:https://github.com/mongodb/mongo-csharp-driver/blob/master/tests/MongoDB.Driver.Tests/Linq/Translators/AggregateProjectTranslatorTests.cs