MongoDB Aggregation Pipeline C #

1

У меня есть следующий запрос Mongo:

db.BusRatings.aggregate(
[     
   { $match: { VId: 2020}},
   { $project: {  vid: '$VId', sb:'$SvcRating.StaffBehavior'  ,bq: '$SvcRating.BusQuality' ,  src: '$SvcDetails.SrcNm', dst: '$SvcDetails.DestNm', py: '$SvcRating.Punctuality'}},    
   { $group: { _id: {vid: '$vid', src: '$src', dst: '$dst'}, numratings: {$sum: 1}, avgpy : { $avg : '$py'}, avgbq: { $avg: '$bq'},avgsb: { $avg: '$sb'}} },
   { $match : { numratings: { $gt: 3 } } },
   { $project: {_id: 0,  'vid' : '$_id.vid',  'src' : '$_id.src',  'dst' : '$_id.dst', 'avg': {'$divide':[ {'$add': [ '$avgpy', '$avgbq', '$avgsb' ]},3.0]}}},
   { $sort : { avg : -1 } }
 ]
)

Каким будет код С# для последнего проецирования в конвейере выше. Я следую примеру, указанному в документации:

http://mikaelkoskinen.net/mongodb-aggregation-framework-examples-in-c/

У меня есть следующий код для первого матча, проекта, группы:

 var match1 = new BsonDocument 
                { 
                    { 
                        "$match", 
                        new BsonDocument 
                            { 
                                {"VId", opId} 
                            } 
                    } 
                };


            var project1 = new BsonDocument 
                { 
                    { 
                        "$project", 
                        new BsonDocument 
                            { 
                                {  "vid", opId},
                                {  "sb", "$SvcRating.StaffBehavior"},
                                {   "bq", "$SvcRating.BusQuality"},
                                {   "src",   "$SvcDetails.SrcNm"},
                                {   "dst", "$SvcDetails.DestNm"} ,
                                {   "py",  "$SvcRating.Punctuality"}
                            } 
                    } 
                };

            var group = new BsonDocument 
                { 
                    { 
                        "$group", 
                        new BsonDocument 
                            { 
                                { "_id", new BsonDocument 
                                             { 
                                                {"vid", "$vid"},
                                                { "src", "$src"},
                                                { "dst", "$dst"}
                                             } 
                                }, 
                                { 
                                    "numratings", new BsonDocument 
                                                 { 
                                                     { "$sum", 1 } 
                                                 } 
                                }, 
                                {
                                    "avgpy", new BsonDocument
                                              {
                                                   { "$avg" , "$py"}
                                              }
                                }
                            }
                            }
                };

            var match2 = new BsonDocument 
                { 
                    { 
                        "$match", 
                        new BsonDocument 
                            { 
                                {"numratings", new BsonDocument
                                    {
                                        {"$gt",3}
                                    }    
                                } 
                            } 
                    } 
                };
Теги:
mongodb-.net-driver
aggregation-framework

1 ответ

2

Попробуйте:

var project2 = new BsonDocument
{
    {
        "$project", new BsonDocument
        {
            {"_id", 0},
            { "vid", "$_id.vid" },
            { "src", "$_id.src" },
            { "dst", "$_id.dst" },
            { "avg", new BsonDocument
                {
                    { "$divide", new BsonArray 
                        {
                            new BsonDocument
                            {
                                {"$add", new BsonArray {"$avgpy", "$avgbq", "$avgsb" }}
                            }, 
                            3.0
                        }
                    }
                }
            }
        }
    }
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню