在我的任務模式中,我有這樣的欄位:
{
name: String
},
{
user: ObjectID
}
我需要對任務進行排序。如果我想按name欄位進行操作,這很容易:
await Tasks.find().sort({name: 1})
這樣可行。但問題是當我想按user.name. 要從用戶那里獲取欄位,我可以填充它們,所以:
await Tasks.find().populate('user', 'name').sort({'user.name': 1})
它不起作用。我無法按populate功能添加的欄位進行排序。我一直在搜索檔案和其他用戶的問題。我發現我可以將排序選項傳遞給populate函式,但它也不起作用。我猜它對填充欄位中的欄位進行排序。
當我嘗試將聚合與這樣的查找一起使用時:
Tasks.aggregate([{ $lookup: {
{
from: 'User',
localField: 'user',
foreignField: '_id',
as: 'someField'
}}}])
它回傳someField: []
有人可以幫助我嗎?非常感謝!
uj5u.com熱心網友回復:
在aggregate查詢中,您應該使用真實名稱而不是型號名稱來參考您的收藏。所以,而不是from: 'User',它應該是from: 'users':
Tasks.aggregate([
{
$lookup: {
from: 'users',
localField: 'user',
foreignField: '_id',
as: 'user'
}
},
{
$set: {
user: { $first: '$user' }
}
},
{
$sort: {
'user.name': 1
}
}
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/522678.html
上一篇:如何在不查看數字是負數還是正數的情況下將數字從高到低排序
下一篇:如何在串列串列中查找重復項?
