Переименование полей с помощью Rockmongo - PullRequest
0 голосов
/ 20 марта 2012

У меня есть много коллекций документов в базе данных Монго, которые выглядят следующим образом:

{
   "_id": ObjectId("4ee5e9079b14f74ef14ddd2f"),
   "number": 456,
   "date": "2012-02-13"
}

Мне нужно переименовать поле "created_at" в "date", и я использую Rockmongo.Я думаю, что лучший способ переименовать это поле - использовать панель исполнения в Rockmongo.Основываясь на моем коде этого поста Я пробовал это:

function rename(x){
   db_name.coll_name.update({"_id":x._id}, {
      $rename: {"date":"created_at"}
   });
}

db_name.coll_name.find({"date":{$ne:null}}).forEach(rename);

, но безуспешно.Я в основном работал с pymongo (и мог бы делать это с этим), но я думаю, что изучение этой панели выполнения было бы очень полезным, так как я продолжаю использовать rockmongo.

1 Ответ

1 голос
/ 20 марта 2012

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

db.coll_name.update({},{$rename:{"created_at":"date"}},false,true);

Где «false» - это опция upsert, а «true» - опция многократного обновления.

Надеюсь, это поможет.

Обновлено с примером. Он даже работает, если поле уже частично переименовано или поле не существует во всех документах:

> db.test2.insert({x:12});
> db.test2.insert({x:12});
> db.test2.insert({x:12});
> db.test2.insert({});
> db.test2.update({},{$rename:{"x":"x2"}},false,true);
> db.test2.find();
{ "_id" : ObjectId("4f68afb1206dcc69f52c2157"), "x2" : 12 }
{ "_id" : ObjectId("4f68afb2206dcc69f52c2158"), "x2" : 12 }
{ "_id" : ObjectId("4f68afb2206dcc69f52c2159"), "x2" : 12 }
{ "_id" : ObjectId("4f68afb5206dcc69f52c215a") }
...