Объединить два поля в новое поле объекта в mongodb - PullRequest
1 голос
/ 17 апреля 2020

Я использую этот код:

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

, чтобы создать поле точек на основе значений Latitude/Longitude, но мне нужно иметь «метку» на каждом из них, поэтому, когда я ищу, то показывает что-то вроде ниже:

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

Есть идеи?

1 Ответ

1 голос
/ 17 апреля 2020

Если я правильно понимаю, ваши документы выглядят так:

[
  {
    "_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"] }
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...