Monogdb创建了一个新字段,它是另外两个字段的数组



我想从集合中的另外两列创建一个新列。

{
"_id" : ObjectId("62f18a84df7b941cf3052f47"),
"longitude" : -104.600832915448,
"latitude" : 41.1892939609291,

}
{
"_id" : ObjectId("62f18a84df7b941cf3052f48"),
"longitude" : -108.117613649085,
"latitude" : 39.4854579742338,

}

我基本上想要一个名为coordinate_pair的新列,它将是一个类似于[经度,纬度]的数组。低于的最终结果

{
"_id" : ObjectId("62f18a84df7b941cf3052f47"),
"longitude" : -104.600832915448,
"latitude" : 41.1892939609291,
"coordinate_pair" : [
-104.600832915448,
41.1892939609291
]
}
{
"_id" : ObjectId("62f18a84df7b941cf3052f48"),
"longitude" : -108.117613649085,
"latitude" : 39.4854579742338,
"coordinate_pair" : [
-108.117613649085,
39.4854579742338
]
}

我尝试运行以下命令:

db.sites.createIndex( { coordinate_pair: "2dsphere" } )
db.sites.aggregate([
{ "$addFields": {
"coordinate_pair": [ "$longitude", "$latitude" ]
}}
])

但它所做的只是向我显示结果,而不是更新集合。我是不是错过了什么?

从mongoDB文档中,

从MongoDB 4.2开始,db.collection.updateMany((方法可以接受一个指定要执行的修改的聚合管道。

使用聚合管道可以实现更具表达力的更新语句,例如基于当前字段值表达条件更新,或者使用另一个字段的值更新一个字段。

因此,在您的情况下,解决方案将是:

db.sites.updateMany(
{},
[
{ $set: { coordinate_pair: [ "$longitude", "$latitude"] }}
]
)

最新更新