gpt4 book ai didi

mongodb - 将 ISO 日期转换为 yyyy-mm-dd 格式

转载 作者:可可西里 更新时间:2023-11-01 09:34:58 26 4
gpt4 key购买 nike

给定集合(#name: users)结构:

{
"_id" : ObjectId("57653dcc533304a40ac504fc"),
"username" : "XYZ",
"followers" : [
{
"count" : 31,
"ts" : ISODate("2016-06-17T18:30:00.996Z")
},
{
"count" : 31,
"ts" : ISODate("2016-06-18T18:30:00.288Z")
}
]
}

我想根据用户名字段查询这个集合,并以 'yyyy-mm-dd' 格式返回 ts。预期输出:

{
"_id" : ObjectId("57653dcc533304a40ac504fc"),
"username" : "XYZ",
"followers" : [
{
"count" : 31,
"date" : "2016-06-17"
},
{
"count" : 31,
"date" : "2016-06-18"
}
]
}

我试过这样的:

db.users.aggregate([
{$match:{"username":"xyz"}},
{$project:{ "followers":{"count":1,
"date":"$followers.ts.toISOString().slice(0,10).replace(/-/g,'-')"
}}
}
])

但似乎没有效果。有人可以帮忙吗?非常感谢。

最佳答案

考虑运行一个聚合管道,让您首先展平数据列表,使用 $dateToString 投影新字段 运算符,然后重新组合扁平化的文档以获得您想要的结果。

以上可以在三个不同的管道中显示:

db.users.aggregate([
{ "$match": { "username": "xyz" } },
{ "$unwind": "$followers" },
{
"$project": {
"username": 1,
"count": "$followers.count",
"date": { "$dateToString": { "format": "%Y-%m-%d", "date": "$followers.ts" } }
}
},
{
"$group": {
"_id": "$_id",
"username": { "$first": "$username" },
"followers": { "$push": {
"count": "$count",
"date": "$date"
}}
}
}
])

对于 MongoDB 3.4 和更新版本,您可以使用新的 $addFields 管道步骤与 $map 一起 无需展开和分组即可创建数组字段:

db.users.aggregate([
{ "$match": { "username": "xyz" } },
{
"$addFields": {
"followers": {
"$map": {
"input": "$followers",
"as": "follower",
"in": {
"count": "$$follower.count",
"date": {
"$dateToString": {
"format": "%Y-%m-%d",
"date": "$$follower.ts"
}
}
}
}
}
}
}
])

关于mongodb - 将 ISO 日期转换为 yyyy-mm-dd 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38039705/

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