У меня в mongoDB около 20 коллекций. Один документ в одной коллекции имеет некоторую связь / связь с документом в другой коллекции. У нас есть одно общее поле "executionId": "какое-то старое значение" во всех документах коллекций. коллекция может иметь один или несколько документов

Я хочу перебрать всю коллекцию, и если какой-либо документ соответствует "executionId": "некоторому старому значению" , то я хочу скопировать этот документ и создать новый документ с новым значением "executionId": "какое-то новое значение" в той же коллекции.

Я хочу повторить это для всей коллекции в моем mongoDB.

Например. Ниже моя коллекция

collection_one
{
  "_id" : ObjectId("5ef615b87127ee8d00229473"),
  "executionId" : "some old value",
  "application" : "app1",
  "status" : "Started"
  
}

collection_two
{
"_id" : ObjectId("5ef615b87127ee8d00229455"),
  "executionId" : "some old value",
  "isOrder" : false,
  "form" : false,
  "officerNumber" : "T643",
  "phoneNumber" : "0482",
  "createdDate" : ISODate("2020-06-26T15:35:20.889Z"),
  "lastModifiedDate" : ISODate("2020-06-26T15:35:25.045Z")
  
}

collection_three
{
 "_id" : ObjectId("5ef615b87127ee8d00229466"),
  "executionId" : "some old value",
  "application" : "app1",
  "country" : "country"
  
}

После выполнения запроса на обновление в приглашении оболочки. Я хочу, чтобы они выглядели вот так.

 collection_one
    {
      "_id" : ObjectId("5ef615b87127ee8d00229473"),
      "executionId" : "some new value",
      "application" : "app1",
      "status" : "Started"
      
    }
    
    collection_two
    {
    "_id" : ObjectId("5ef615b87127ee8d00229455"),
      "executionId" : "some new value",
      "isOrder" : false,
      "form" : false,
      "officerNumber" : "T643",
      "phoneNumber" : "0482",
      "createdDate" : ISODate("2020-06-26T15:35:20.889Z"),
      "lastModifiedDate" : ISODate("2020-06-26T15:35:25.045Z")
      
    }
    
    collection_three
    {
     "_id" : ObjectId("5ef615b87127ee8d00229466"),
      "executionId" : "some new value",
      "application" : "app1",
      "country" : "country"
      
    }
0
mike 26 Июн 2020 в 19:39

1 ответ

Лучший ответ

Для этого вы можете использовать updateMany.

db.collectionName.updateMany(
    { executionId: 'some old value' },
    { $set: { executionId : 'some new value'} }
);

Поскольку вы хотите сделать это для всех коллекций в своей базе данных, вы можете попробовать следующее:

db.getCollectionNames().forEach(collection => {
    db[collection].updateMany({ executionId: 'some old value' },  { $set: { executionId : 'some new value'} })
});
1
Ramesh Reddy 26 Июн 2020 в 17:08