2016-12-26 1 views
0

Я хочу сортировать данные дочернего объекта, замечание: они не являются населенным объектом.как сортировать с дочерним объектом в mongoose

Мой вопрос заключается в том, чтобы отсортировать f_fields объект с полем: f_position, что в дочернем объекте?

model.js

var e_formSchema = new mongoose.Schema({ 

     f_id: Number, 
     f_name: String, 

     f_fields: [{ 
      f_f_id:Number, 
      f_position: Number, 
      f_obligatory :Boolean, 
      }] 
    } 

    , {collection: 'forms'}); 

Пример данных

{ 

    "f_id" : 3724, 
    "f_name" : "form 1", 

    "f_fields" : [ 
     { 
      "f_f_id" : 64070, 
      "f_position" : 5, 
      "f_obligatory" : true, 


     }, 
     { 
      "f_f_id" : 64071, 
      "f_position" : 6, 
      "f_obligatory" : true 
     }, 
     { 
      "f_f_id" : 64204, 
      "f_position" : 1, 
      "f_obligatory" : true, 
     } 
    ], 
} 

Результат хотел

{ 

    "f_id" : 3724, 
    "f_name" : "form 1", 

    "f_fields" : [ 
     { 
      "f_f_id" : 64204, 
      "f_position" : 1, 
      "f_obligatory" : true, 
     } 

     { 
      "f_f_id" : 64070, 
      "f_position" : 5, 
      "f_obligatory" : true, 


     }, 
     { 
      "f_f_id" : 64071, 
      "f_position" : 6, 
      "f_obligatory" : true 
     } 

    ], 
} 

Я хочу, чтобы отсортировать суб Объектами f_fields, там же объект

Я попробовал этот код

getForm:function (id, callback){ 
      var model = require("forms"); 


      //model 
      model .find({f_id:3724}, function(err, forms) { 


      forms.sort({'f_fields.f_position':1}) 



       .exec(function(err, doc){ 
        if (err) { 

         callback(err) ; 

        } else { 


         callback(doc) ; 

        } 
       }); 
      }); 
     }, 

Ошибка

has no method 'exec' 

ответ

0

Вы можете сделать так:

db.forms.aggregate(
    { $match: { 
     f_id : 3724  }}, 

    // Expand the array into a stream of documents 
    { $unwind: '$f_fields' }, 


    // Sort in descending order 
    { $sort: { 
     'f_fields.f_position':-1 
    }} 
) 

ВЫХОД:

{ 
    "result" : [ 
     { 
      "f_id" : 3724, 
      "f_name" : "form 1", 
      "f_fields" : { 
       "f_f_id" : 64204, 
       "f_position" : 1, 
       "f_obligatory" : true 
      } 
     }, 
     { 
      "f_id" : 3724, 
      "f_name" : "form 1", 
      "f_fields" : { 
       "f_f_id" : 64070, 
       "f_position" : 5, 
       "f_obligatory" : true, 
      } 
     }, 
     { 
      "f_id" : 3724, 
      "f_name" : "form 1", 
      "f_fields" : { 
       "f_f_id" : 64071, 
       "f_position" : 6, 
       "f_obligatory" : true, 
      } 
     } 
    ], 
    "ok" : 1 
} 
+0

Спасибо Сэм, но я хочу в свою очередь, чтобы иметь 3 упорядоченные объекты к югу в одном объекте «f_fields» – user2285831

+0

Это не представляется возможным непосредственно сортировать Вложенный массив с мангуста. Для этого вы можете пойти с поиском запроса, а затем выполнить сортировку по полученному результату. – Sam

+0

Я пробовал скачать скрипт, как вы упомянули, но он возвращает ошибку, пожалуйста, посмотрите Сэм, спасибо. – user2285831