我有一个用户集合,其中包含每个用户的大量属性。一个属性是一个数组('guestlist_submitted'),我试图根据日期字段返回该数组中的最新3个项目。
使用Mongoose,我可以将特定属性定位到用户对象上,但似乎无法对其进行限制或排序。
我已经尝试使用slice和日期计算来返回最近的3个整数,但是我一直在努力使它正确,并且不确定什么地方出错了。
我已经尝试在查询构建器上使用排序/限制,但是我了解到尽管我在查询构建器中说了“ select('guestlist_submitted')”,但这些不适用于我所针对的属性内的数组。
当我只针对用户对象的属性返回结果时,它是一个数组,其中包含一个对象,该对象中包含另一个数组。我在遍历它以定位内部数组以使用切片和日期排序时遇到问题。
第一次尝试
Users.
find({ fbid: req.query.fbid}).
select('guestlist_submitted -_id').
sort({"guestlist_submitted.date": 'desc'}).
limit(3).
exec((err, result) => {
if (err) throw (err));
if (result) {
res.send(result);
}
第二次尝试:
Users.
find({ fbid: req.query.fbid}).
select('guestlist_submitted -_id').
exec((err, result) => {
if (err) res.send(JSON.stringify(err));
if (result) {
const slicedArr = result.guestlist_submitted.slice(0,1);
const sortedResultArr = slicedArr.sort(function(a,b){return new Date(b.date) - new Date(a.date); });
const newResultArr = sortedResultArr.slice(0, 2);
res.send(newResultArr);
}
我能得到的最好的是'guestlist_submitted'和整个数组,而不是排序的,它在数组内的对象内。
我希望输出是可以在客户端上显示的新数组中guestlist_submitted数组的3个最新结果。
预先感谢您的帮助
编辑-找出解决方案
我最终想出如何使用aggregate()获得想要的东西
Users.aggregate([
{
$match: {fbid: req.query.fbid}
},
{
$unwind: "$guestlist_submitted"
},
{
$sort: {'guestlist_submitted.date': -1}
},
{
$limit: 2
},
{
$group: {_id: '$_id', guestlist_submitted: {$push: '$guestlist_submitted'}}
},
{
$project: { guestlist_submitted: 1, _id: 0 }
}
]).exec((err, result) => {
if (err) res.send(JSON.stringify(err));
if (result) {
console.log(result);
res.send(result);
}
});
我最终想出如何使用aggregate()获得想要的东西
Users.aggregate([
{
$match: {fbid: req.query.fbid}
},
{
$unwind: "$guestlist_submitted"
},
{
$sort: {'guestlist_submitted.date': -1}
},
{
$limit: 2
},
{
$group: {_id: '$_id', guestlist_submitted: {$push: '$guestlist_submitted'}}
},
{
$project: { guestlist_submitted: 1, _id: 0 }
}
]).exec((err, result) => {
if (err) res.send(JSON.stringify(err));
if (result) {
console.log(result);
res.send(result);
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句