.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记录,我想获取一个具有最大值的记录。
答案 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
}