繁体   English   中英

如何在猫鼬中对子对象进行排序

[英]how do I sort with child object in mongoose

我想对子对象的数据进行排序,请注意:它们不是填充的对象。

我的问题是如何用子对象中的field: f_positionf_fields对象排序?

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'

您可以这样:

  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
    }}
)

OUTPUT:

{
    "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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM