我想抓取按日期排序的資料,但日期不在欄位值中,它在欄位值的物件陣列中(如果我說得對的話)。
這是我擁有的資料示例:
{
role: "User",
fullName: "Verna Pagac",
username: "dwightkoss95",
email: "[email protected]",
orders: [{
buyerUsername: 'admin',
boughtAt: 2022-09-20T20:14:59.304Z
},
{
buyerUsername: 'admin',
boughtAt: 2022-10-30T22:35:35.546Z
}]
}
在我通過以下命令提取訂單后,我想按購買的順序對它們進行排序,但是如何?
const usersWithOrders = await users
.find({
orders: { $exists: true, $ne: [] }
})
const orders = []
usersWithOrders.map((user) => {
for (i=0 ; i<user.orders.length ; i ) {
orders.push(user.orders[i])
}
})
我希望新的訂單排在首位。
console.log(orders)
// now it shows the following out put:
/*
[{
buyerUsername: 'admin',
boughtAt: 2022-09-20T20:14:59.304Z
},
{
buyerUsername: 'admin',
boughtAt: 2022-10-30T22:35:35.546Z
}]
*/
uj5u.com熱心網友回復:
如果您愿意,可以使用聚合框架直接從 db 排序
db.users.aggregate([
{ $unwind: '$orders' },
{ $sort: { 'orders.boughtAt': -1 } },
{
$group: {
_id: '$_id',
user: { $first: '$$ROOT' },
orders: { $push: '$orders' },
},
},
])
或者如果您愿意,您可以在 JS 中排序
orders.sort((a, b) => new Date(b.boughtAt) - new Date(a.boughtAt))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/529489.html
