我試圖找到如何使用貓鼬執行的 .find() 按天和月對生日日期進行排序。
實際代碼:
const embed2 = new MessageEmbed()
.setColor('#FBC78E')
.setTitle(`Liste des anniversaires de ${message.guild.name}`)
birthday.find({}).then(data => {
embed2
.setDescription(Array.from(data).map(u => `<@${u.user_id}> : ${u.birthday}`))
loading_message.delete();
message.guild.channels.resolve(args[1]).send(embed2)
});
問題是當我嘗試向我的 .find() 添加 .sort('birthday') 時,它只過濾日子,但這不是我要搜索的,這是 .find() 的結果(沒有.sort()):
[
{
_id: new ObjectId("620d763c86159915746f431b"),
user_id: '493470054415859713',
birthday: '04/11',
__v: 0
},
{
_id: new ObjectId("620d770505fa9fe0910968c0"),
user_id: '933751655046979645',
birthday: '18/05',
__v: 0
},
{
_id: new ObjectId("620d77575417ab94a5f2c837"),
user_id: '735987183714041867',
birthday: '15/12',
__v: 0
},
{
_id: new ObjectId("620d85fed17e202ed6d2b847"),
user_id: '320851795058360331',
birthday: '03/11',
__v: 0
}
]
例外結果:
[
{
_id: new ObjectId("620d770505fa9fe0910968c0"),
user_id: '933751655046979645',
birthday: '18/05',
__v: 0
},
{
_id: new ObjectId("620d85fed17e202ed6d2b847"),
user_id: '320851795058360331',
birthday: '03/11',
__v: 0
},
{
_id: new ObjectId("620d763c86159915746f431b"),
user_id: '493470054415859713',
birthday: '04/11',
__v: 0
},
{
_id: new ObjectId("620d77575417ab94a5f2c837"),
user_id: '735987183714041867',
birthday: '15/12',
__v: 0
}
]
正如你在這里看到的,生日是按天和月排序的,這是我嘗試做的。謝謝。
uj5u.com熱心網友回復:
當您對欄位值“04/11”、“18/05”、“15/12”、“03/11”進行排序時 - 排序為“03/11”、“04/11”、“15/12” ”,“18/05”。它是由字串值組成的——其中“0”小于“1”,依此類推。由于birthday資料的格式為“DD/MM”,因此您無法獲得所需的正確排序,即按 MM 和 DD。資料格式需要為“MM/DD”。這樣做的方法是轉換格式,然后使用新格式化的值進行排序。
例如,您可以使用聚合運算子來切換欄位中 DD 和 MM 的值,birthday并創建一個名為的新欄位birthday_MM_DD并使用它進行排序。請注意代碼在mongosh或mongoshell 中運行。
var pipeline = [
// Create a new birthday field with MM/DD format (a temporary field)
{
$addFields: {
birthday_MM_DD: {
$concat: [
{ $substrCP: [ "$birthday", 3, 2 ] },
"/",
{ $substrCP: [ "$birthday", 0, 2 ] }
]
}
}
},
// Sort with the newly formatted birthday field
{
$sort: {
birthday_MM_DD: 1
}
},
// Remove the temporary birthday field
// (as it is no longer needed)
{
$unset:
"birthday_MM_DD"
},
]
db.collection.aggregate(pipeline)
結果有檔案格式化按birthday預期正確排序:
"18/05", "03/11", "04/11", "15/12"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/429522.html
標籤:javascript mongodb 猫鼬 不和谐.js
上一篇:如何使貓鼬區分大小寫?
