将两个字段合并到mongodb中的新对象字段中

时间:2020-04-17 19:24:14

标签: mongodb mongodb-query

我正在使用以下代码:

db.collection.updateMany({},[{ $set: {points: [ "$latitude", "$longitude" ] } },
                                       { $unset: [ "longitude", "latitude" ] }])

基于Latitude/Longitude值创建点字段,但是我需要在每个值上都带有一个“标签”,因此当我搜索时,它显示如下内容:

"points": 
 {
     [
       { 
         "latitude": -3.724404,
         "longitude": -38.557694
       }
     ]
 }

有什么主意吗?

1 个答案:

答案 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"] }
]);