1

有谁知道我是否可以在 c# 的 mongo 单元上运行这个模式。我也生成了一个 BsonArray,但我不知道如何在上下文中编译它,有人可以帮忙吗?下面的原始模式正在工作,我只是更改了字段的名称,因此可能存在语法错误,但我不知道如何在 c# 中运行它。

C#:

_db.GetCollection.Aggregate()....

BsonArray:

return new BsonArray
            {
                new BsonDocument("$limit", 1),
                new BsonDocument("$project", new BsonDocument("_id", "$$REMOVE")),
                new BsonDocument("$lookup", new BsonDocument
                {
                    { "from", "table1" },
...... 
Schema:
[
   {
      "$limit":1
   },
   {
      "$project":{
         "_id":"$$REMOVE"
      }
   },
   {
      "$lookup":{
         "from":"Table1",
         "pipeline":[
            {
               "$match":{
                  "date":{
                     "$gte":"ISODate(""2010-04-29T00:00:00.000Z"")",
                     "$lt":"ISODate(""2030-04-29T00:00:00.000Z"")"
                  }
               }
            },
            {
               "$addFields":{
                  "id":"$_id",
                  "value":1
               }
            },
            {
               "$project":{
                  "_id":0,
                  "typevalue":0
               }
            }
         ],
         "as":"Table1"
      }
   },
   {
      "$lookup":{
         "from":"Table2",
         "pipeline":[
            {
               "$match":{
                  "dateInit":{
                     "$gte":"ISODate(""2010-04-29T00:00:00.000Z"")",
                     "$lt":"ISODate(""2030-04-29T00:00:00.000Z"")"
                  },
                  "externalId":1,
               }
            },
            {
               "$addFields":{
                  "id":"$_id",
                  "number":"$number",
                  "client":"$client",
                  "date":"$dateInit",
                  "value":"$value",
                  "status":0,
                  "event":[],
                  "file":"$arrayByte"
               }
            },
            {
               "$project":{
                  "_id":0,
                  "date":0,
                  "arrayByte":0,
                  "Rows":0
               }
            }
         ],
         "as":"Table2"
      }
   },
   {
      "$project":{
         "union":{
            "$concatArrays":[
               "$Table1",
               "$Table2"
            ]
         }
      }
   },
   {
      "$unwind":"$union"
   },
   {
      "$replaceRoot":{
         "newRoot":"$union"
      }
   },
   {
      "$sort":{
         "date":-1
      }
   },
   {
      "$skip":1
   }
]
4

1 回答 1

0
public static BsonDocument[] GetList()
       {
           return new BsonDocument[]
           {
               new BsonDocument("$limit", 1),
               new BsonDocument("$project", new BsonDocument("_id", "$$REMOVE")),
               new BsonDocument("$lookup", new BsonDocument
               {
                   { "from", "Table1" },
                   { "pipeline", new BsonArray}
.......

var list = await _db<Collection>.GetCollection.Aggregate<BsonDocument>(GetList()).ToListAsync();

if (list.Any())
var myList= list.Select(x => BsonSerializer.Deserialize<MyObject>(x)).ToList();

于 2021-06-18T20:03:50.930 回答