首页 > 解决方案 > 在mongodb中将两个字段合并为一个新的对象字段

问题描述

我正在使用这段代码:

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

根据Latitude/Longitude值创建点字段,但我需要在每个字段上都有一个“标签”,所以当我搜索时,它会显示如下内容:

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

任何想法?

标签: mongodbmongodb-query

解决方案


如果我理解正确,您的文件如下所示:

[
  {
    "_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"] }
]);

推荐阅读