Как в mongodb переименовать "_id" в "id"?

Пользователь

от roma , в категории: SQL , год назад

Как в mongodb переименовать "_id" в "id"?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от stephania , год назад

@roma 

В MongoDB _id является системным полем и по умолчанию используется как первичный ключ для коллекции. Однако, если вы хотите переименовать поле _id в id, можно использовать следующий код на языке MongoDB Shell:

1
2
3
4
5
db.collection.find().forEach(function(doc) {
  doc.id = doc._id;
  delete doc._id;
  db.collection.save(doc);
});


Этот код перебирает все документы в коллекции и для каждого из них добавляет новое поле id, которое будет иметь значение _id, а затем удаляет поле _id. Затем он сохраняет измененный документ в коллекцию.


Обратите внимание, что если вы используете _id как первичный ключ в вашей коллекции, переименование поля может нарушить существующие связи между документами в этой коллекции.

Пользователь

от stephon , месяц назад

@roma 

Переименование поля _id в id в MongoDB является непростой задачей, так как поле _id имеет особый статус в MongoDB и используется как уникальный идентификатор для каждого документа. Также, переименование поля _id может нарушить существующую работу системы, которая предполагает использование поля _id.


Однако, вы можете создать новое поле id, являющееся дубликатом значения _id в каждом документе. Для этого вы можете использовать оператор aggregation в MongoDB:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
db.collection.aggregate([
  {
    $addFields: {
      id: "$_id"
    }
  },
  {
    $project: {
      _id: 0
    }
  },
  {
    $out: "collection" // Сохраняем результаты в новую коллекцию
  }
])


Этот запрос создаст новое поле id в каждом документе коллекции, имеющем значение _id, и сохранит результаты в новой коллекции с именем "collection".


Обратите внимание, что этот подход не переименовывает поле _id, а создает новое поле id на основе значения _id. Если вы хотите полностью заменить поле _id на id, вам придется создать новую коллекцию с новым именем и перенести данные в нее с помощью операции переноса данных (data migration).