想要查询查询结果

时间:2015-03-19 12:47:49

标签: node.js mongodb mongoose

.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都包含了许多的recipt_Number记录,我想获取一个具有最大值的记录。

1 个答案:

答案 0 :(得分:0)

假设您的收藏集包含以下文件:

/* 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)
        }
    ]
}

您可以尝试以下聚合集,它会返回您需要的内容:

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

返回:

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