2016-05-27 1 views
1

У меня есть структура документа в mongodb, и я хочу изменить ее для всех моих документов, не используя такую ​​агрегатную функцию, как это response, но создав определенную функцию и получим результат:Изменение структуры документа в mongodb с оболочкой mongo

{ 
"_id" : ObjectId("String"), 
"content" : { 
    "href" : "String", 
    "text" : "String", 
    "code" : "String " 
} 
} 

к тому, что:

{ 
"_id" : ObjectId("String"), 
"href" : "String", 
"text" : "String", 
"code" : "String " 
} 

Любые предложения, пожалуйста. Спасибо.

ответ

2

Если вы не фантазии агрегации (или ваши content СОДЕРЖАНИЯ может отличаться по документам), вы можете также использовать

db.coll.find().forEach(function (d) { 
    db.coll.update({ 
     _id : d._id 
    }, { 
     $set : d.content, 
     $unset : { 
      'content' : 1 
     } 
    }) 
}); 
+0

спасибо, что это работает :) –

2

Простой способ сделать это - использовать структуру агрегации. Затем сохраните вывод в newCollection и после проверки вы можете удалить старый и переименовать созданный.

db.collection.aggregate([{ 
      $project : { 
       _id : 1,  
       href : "$content.href", 
       text : "$content.text", 
       code : "$content.code",  
      } 
     }, { 
      $out : "newCollection" 
     } 
    ]) 
+0

спасибо за ваш ответ, но на самом деле я хочу использовать spesific как предыдущий ответ. Большое спасибо. –