我正在使用以下代码:
db.collection.updateMany({},[{ $set: {points: [ "$latitude", "$longitude" ] } },
{ $unset: [ "longitude", "latitude" ] }])
基于Latitude/Longitude
值创建点字段,但是我需要在每个值上都带有一个“标签”,因此当我搜索时,它显示如下内容:
"points":
{
[
{
"latitude": -3.724404,
"longitude": -38.557694
}
]
}
有什么主意吗?
答案 0 :(得分:1)
如果我理解正确,那么您的文档如下所示:
[
{
"_id" : 123,
"latitude": -3.724404,
"longitude": -38.557694
},
{
"_id" : 456,
"latitude": -3.724404,
"longitude": -38.557694
}
]
您可以使用此查询:
db.collection.updateMany({}, [
{
$set: {
points: [
{
latitude: "$latitude",
longitude: "$longitude"
}
]
}
},
{ $unset: ["longitude", "latitude"] }
]);
要得到这样的东西:
[
{
"_id": 123,
"points": [
{
"latitude": -3.724404,
"longitude": -38.557694
}
]
},
{
"_id": 456,
"points": [
{
"latitude": -3.724404,
"longitude": -38.557694
}
]
}
]
但是为什么需要points
作为数组,相反它可以是这样的对象:
"points": {
"latitude": -3.724404,
"longitude": -38.557694
}
通过几乎相同的查询获取它:
db.collection.updateMany({}, [
{
$set: {
points:
{
latitude: "$latitude",
longitude: "$longitude"
}
}
},
{ $unset: ["longitude", "latitude"] }
]);