Похоже, у вас есть несколько проблем здесь.
# 1: Команда $unset
Насколько я понимаю, это должно работать толькохорошо.В моем тесте я получил следующий вывод:
MongoDB shell version: 1.6.5
connecting to: test
> db.foo.save( { _id : 1, status : { err : 'blah', y : 1 } } )
> db.foo.save( { _id : 2, status : { err : 'blahblah', y : 5 } } )
> db.foo.find()
{ "_id" : 1, "status" : { "err" : "blah", "y" : 1 } }
{ "_id" : 2, "status" : { "err" : "blahblah", "y" : 5 } }
> db.foo.update( { }, { $unset : { "status.err" : 1 } }, false, true )
> db.foo.find()
{ "_id" : 1, "status" : { "y" : 1 } }
{ "_id" : 2, "status" : { "y" : 5 } }
# 2: Использование RAM
, если я выполняю команду $ unset для столбца вочень большая коллекция, mongodb использует весь оперативной памяти на сервере (как будто он пытается сохранить всю коллекцию в памяти)
Это именно то, что пытается сделать MongoDB.MongoDB использует отображенные в память файлы.MongoDB загрузит все данные в оперативную память и позволит операционной системе управлять проблемами с виртуальной памятью.
Поэтому, когда вы делаете запрос без индексов, вы в основном просите MongoDB пройтись по каждому элементу в коллекции.По сути, это гигантский цикл, работающий со всеми вашими данными, поэтому для этого потребуется загрузка всего с диска.
До сих пор это все нормально.
..Затем сервер падает
Это не нормально.Я выполнил команду обновления этого типа на сотнях миллионов документов без сбоя сервера.Можете ли вы предоставить более подробную информацию по этой проблеме?У вас есть файлы журналов?
Если это так, я бы посоветовал передать ваши ошибки в группы Google, чтобы они могли помочь определить источник сбоя.http://groups.google.com/group/mongodb-user