Агрегирование по дате совпадения $ или с другим полем в Mongodb в C# - PullRequest
0 голосов
/ 05 марта 2020

Я использую мон go агрегацию с совпадением / группой. Ниже мой мон go запрос и аналогичные я пытаюсь преобразовать в c#. Может получить часть даты, но борется за $ или часть за поле "ev". Необходимо применить приведенное ниже совпадение / или / группу / сортировку для одной коллекции и поиск для другой коллекции.

db.getCollection("customer").aggregate(
    [
        { 
            "$match" : { 
                "eventTs" : { 
                    "$gte" : ISODate("2020-02-27T00:00:00.000-0500"), 
                    "$lte" : ISODate("2020-02-28T00:00:00.000-0500")
                },
                $or: [ 
                    { "ev": "JournalAdded" }, 
                    { "ev": "JournalProcessed" }, 
                    { "ev": "JournalModified" }, 
                    { "ev": "JournalVoided" },
                    { "ev": "JournalApproved" },                     
                    { "ev": "JournalCancelled" } 
                    ] 
            }
        }, 
        { 
            "$sort" : { 
                "eid" : 1.0, 
                "eseq" : 1.0
            }
        }, 
        { 
            "$group" : { 
                "_id" : "$eid", 
                lastSeq: {$last: "$eseq"},
                eventNames:{$push: "$ev"}
            }
        },
        {
           "$lookup":
             {
               from: "xyz",
               localField: "_id",
               foreignField: "_eid",
               as: "Replicated"
             }
        }                  

    ]

);

рабочий c# код:

var match = new BsonDocument
             {
                {
                  "$match",
                   new BsonDocument
                   {
                      { "eventTs", new BsonDocument
                         {
                            { "$gte", startTs },
                            { "$lte", endTs }
                         }
                      },
                    { "ev", "JournalAdded" },
                    //{ "ev", "JournalProcessed" },
                    //{ "ev", "JournalModified" },
                    //{ "ev", "JournalVoided" },
                    //{ "ev", "JournalApproved" },
                    //{ "ev", "JournalCancelled" }


        }
        }
            };

                var pipeline = new[] { match };
                var result = instructionEventsDocs.Aggregate<BsonDocument>(pipeline);
                List<BsonDocument> list = result.ToList();

Необходим c# эквивалент выше пн go запрос. Кто-нибудь может мне помочь с этим?

Ответы [ 2 ]

0 голосов
/ 05 марта 2020
var match = new BsonDocument
             {
                {
                  "$match",
                   new BsonDocument
                   {
                      { "eventTs", new BsonDocument
                         {
                            { "$gte", startTs },
                            { "$lte", endTs }
                         }
                      },                       
                       {
                      "$or", new BsonArray  {
                        new BsonDocument
                        {
                            { "ev", "JournalAdded" }
                        },
                        new BsonDocument
                        {
                            { "ev", "JournalProcessed" }
                        }

                      }
                    },
                   }
        }
            };

Equivalent mongo query 
{{ "$match" : { "eventTs" : { "$gte" : ISODate("2020-02-27T05:00:00Z"), "$lte" : ISODate("2020-02-28T05:00:00Z") }, "$or" : [{ "ev" : "JournalAdded" }, { "ev" : "JournalProcessed" }] } }}
0 голосов
/ 05 марта 2020

Вы также можете добавить BsonArray после BsonDocument для $or части для поля "ev", посмотрите ответы по этой ссылке Добавление массива BSON в BsonDocument в MongoDB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...