刚刚开始学习mongodb,想要尝试分桶,目前显示的问题是要使用$getField~~求指点修改
目的:
Mogodb中test1数据库中已经存在集合location,存储的文档格式为: { “_id” : ObjectId(“64548df05f6016c6e607442f”), “gid” : “G001301003_12300”, “height” : 300.0, “lon” : 105.0, “lat” : 33.0, “temperature” : 26.41, “humidity” : 18.75, “timestamp” : “2021-07-05 10:01:00” }
如何对该集合数据进行时间按天分桶,形成新的集合location_bucket,使得新集合的文档存储格式为:
{ “_id” : ObjectId(“64548df05f6016c6e607442f”), “gid” : “G001301003_12300”, “height” : 300.0, “lon” : 105.0, “lat” : 33.0,
“weather”:{ //1点 “0“:{ “temperature” : 26.41, “humidity” : 18.75, }, “1“:{ “temperature” : 26.41, “humidity” : 18.75, }, “23“:{ “temperature” : 26.41, “humidity” : 18.75, }, } }
目前代码为:
from pymongo import MongoClient
from datetime import datetime, timedelta
# 连接Mongodb数据库
client = MongoClient('localhost', 27017)
db = client['test1']
pipeline = [
{
"$group": {
"_id": {
"gid": "$gid",
"date": {
"$dateToString": {
"format": "%Y-%m-%d",
"date": {
"$toDate": "$timestamp"
}
}
}
},
"data": {
"$push": {
"hour": {
"$hour": {
"$toDate": "$timestamp"
}
},
"temperature": "$temperature",
"humidity": "$humidity"
}
}
}
},
{
"$project": {
"_id": 0,
"gid":"$_id.gid",
"date": "$_id.date",
"weather": {
"$arrayToObject": {
"$map": {
"input": "$data",
"as": "el",
"in": {
"$let": {
"vars": {
"hour": {
"$toString": "$$el.hour"
}
},
"in": {
"$arrayToObject": {
"$map": {
"input": [
"humidity",
"temperature"
],
"as": "field",
"in": {
"k": "$$field",
"v": "$$el.$$field"
}
}
}
}
}
}
}
}
}
}
},
{
"$out": "location_bucket"
}
]
# 执行聚合操作
db.location.aggregate(pipeline)
#执行错误
Mr.Mongo 更改状态以发布
MongoDB中文社区