想在查询结果上写一个查询

Want to write a query on queried result

.get(function(req, res){
    Recipt.find({'User':req.params.name})
          .sort('-allRecipt.recipt_Number') 
          .limit(1)
          .select('allRecipt')
          .exec(function(err, doc){
              if(err) res.send(err);
              console.log(doc);
    });
});

我有一个这样的代码,它从 mongoose 中挑选出最大值为 recipt_Number 的文档,这是数组 allRecipt 的一个字段。但所有收据还包含许多 recipt_Number 记录,我想获取具有最大值的记录。

假设您的 collection 有以下文件:

/* 0 */
{
    "_id" : ObjectId("550999a3c89ce9e17ea01845"),
    "user" : "Chris",
    "allRecipt" : [ 
        {
            "update_time" : NumberLong(1426690563),
            "recipt_Number" : NumberLong(4)
        }
    ]
}

/* 1 */
{
    "_id" : ObjectId("550999a3c89ce9e17ea01846"),
    "user" : "Chris",
    "allRecipt" : [ 
        {
            "update_time" : NumberLong(1426690563),
            "recipt_Number" : NumberLong(8)
        }
    ]
}

您可以尝试以下聚合集,它returns您需要的是:

Recipt.aggregate([
    {$match: {user: req.params.name}},
    {$unwind: '$allRecipt'},
    {$project:{ "allRecipt.recipt_Number": 1 }},
    {$sort:{ "allRecipt.recipt_Number": -1 }},
    {$limit: 1}    
], function (err, result) {
    if (err) {
        console.log(err);
        return;
    }
    console.log(result);
});

Returns:

{
    "result" : [ 
        {
            "_id" : ObjectId("550999a3c89ce9e17ea01846"),
            "allRecipt" : {
                "recipt_Number" : NumberLong(8)
            }
        }
    ],
    "ok" : 1
}