сортировка по полю элемента реферинга объекта, не работающему с $ group и $ project в Mongodb - PullRequest
0 голосов
/ 24 октября 2018

Я получаю этот вывод: output

Сортировка по внутреннему массиву не работает.У меня есть две таблицы, как показано ниже.

Схема страниц такая:

const PageSchema = new Schema({
    name: {
        type: String,
        required: true
     },
     created: {
         type: Date
     },
     position: {
         type: Number,
         default: 0
     }
 });
 module.exports = mongoose.model('pages', PageSchema);

Схема контейнера такая:

const ContainerSchema = new Schema({ 
    filename: {
            type: String,
            required: true
        },pageId: {
            type: Schema.Types.ObjectId,
            ref: 'pages'
        },
        created: {
            type: Date
        }  
    }); 

Для сортировки данных яиспользовал этот код:

Container.aggregate(match, {
    "$group": {
        "_id": {
            "pageId": "$pageId",
             "id": "$_id",
             "filename": "$filename",
             "position": "$position"
         },
         "containerCount": {
              "$sum": 1
         }
     }
 }, {
     "$group": {
         "_id": "$_id.pageId",
         "container": {
             "$push": {
                  "_id": "$_id.id",
                  "filename": "$_id.filename",
              },
          },
          "position": {
              "$first": "$_id.pageId.position"
          }
          "count": {
              "$sum": "$containerCount"
          }
      }
  }, {
      "$project": {
          "container": 1,
          "count": 1
      }
  }, {
      "$sort": {
          "position": 1
      }
  }).exec()

Я хочу отсортировать данные в соответствии с полем позиции на страницах, но он не работает.

1 Ответ

0 голосов
/ 24 октября 2018

Вы забыли добавить position в $project.

Как только вы добавите $project, он будет доступен в $sort

        {
          "$project": {
            "position" :1,
            "container": 1,
            "count": 1
          }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...