gpt4 book ai didi

mongodb - 在 MongoDB 中查找最大值

转载 作者:行者123 更新时间:2023-12-05 04:39:57 24 4
gpt4 key购买 nike

我有收藏-歌曲

我需要找到最长的歌曲,但歌曲的长度有两种格式:秒和 HH:MM:SS。

{
"_id": "61179c8d43400f31df195223",
"name": "song1",
"time": 2000
},
{
"_id": "61179c8341f00f31df159223",
"name": "song2",
"time": "00:34:16"
},
{
"_id": "61179c8341f00f31df195223",
"name": "song3",
"time": 2800
},
{
"_id": "61179c8380f00f31df195223",
"name": "song4",
"time": "00:01:10"
}
,{
"_id": "61179c8310f00f31df195223",
"name": "song5",
"time": "00:15:10"
}

最佳答案

没有直接的方法可以做到这一点,你可以尝试聚合管道,

  • $addFields 添加或编辑字段
  • $cond 使用 $isNumber 检查是 time 字段编号如果是则返回当前 time 否则继续其他部分
  • $let 在使用 $split by ":"
  • 拆分后创建内存变量 time
  • $arrayElemAt 获取拆分数组上方的特定元素形式
  • $toInt 将拆分数字转换为整数
  • $multiply 将小时、分钟乘以特定数字以将其转换为秒
  • $sum 获取总秒数
  • $sort时间降序
  • $limit 获取第一个文档
db.collection.aggregate([
{
$addFields: {
time: {
$cond: [
{ $isNumber: "$time" },
"$time",
{
$let: {
vars: {
time: { $split: ["$time", ":"] }
},
in: {
$sum: [
{
$multiply: [
{ $toInt: { $arrayElemAt: ["$$time", 0] } },
3600
]
},
{
$multiply: [
{ $toInt: { $arrayElemAt: ["$$time", 1] } },
60
]
},
{ $toInt: { $arrayElemAt: ["$$time", 2] } }
]
}
}
}
]
}
}
},
{ $sort: { time: -1 } },
{ $limit: 1 }
])

Playground

关于mongodb - 在 MongoDB 中查找最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70368898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com