Как изменить поле или быстро обновить в MongoDB? - PullRequest
5 голосов
/ 09 августа 2011

Документ - это

{title:"here", lat:123.4512, lng:36.3423, time:"2011-01-02"}

Я хочу изменить этот документ, например

{title:"here", {latlng: {lat:123.4512, lng:36.3423}}, time:"2011-01-02"}

, поэтому я попробую это на консоли mongodb.

db.coll.find().forEach(function(u){
  u.latlng = {"lat":u.lat, "lng":u.lng};
  db.coll.save(u);
  db.coll.update(u, {$unset:{"map_x1":1, "map_y1":1}});
})

, но этоочень медленный TT

Я думаю, что другое решение

db.coll.find().forEach(function(u){
  db.coll.update(u, {{"latlng" : {"lat":u.lat, "lng":u.lng}}, $unset:{"lat":1, "lng":1}});
})

, но я не могу запустить его.потому что первое решение все еще работает ....

у вас есть какое-нибудь быстрое решение, подобное этой работе?

1 Ответ

10 голосов
/ 09 августа 2011

Ваш второй запрос не работает, поскольку он перезапишет весь документ, используйте $ set:

db.coll.find().forEach(function(u){
  db.coll.update(u, {$set:{"latlng" : {"lat":u.lat, "lng":u.lng}}, $unset:{"lat":1, "lng":1}});
})

Это будет как минимум в два раза быстрее, чем ваша первоначальная попытка, поскольку там вы обновляетеодин и тот же документ дважды, что не обязательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...