2013-07-25 4 views
24

Я ищу правильный способ, чтобы удалить все элементы из поля массива (во всех документах) в MongoDB - это, как представляется, эквивалент, который рекомендуется:Mongodb - правильный способ удаления всех элементов в поле массива?

db.collection.update({}, { $pull : { 'myArray': {} }}, {multi:true}) 
(или, возможно, какой-то другой способ?)

или

db.collection.update({}, { $set : {'myArray': [] }} , {multi:true}) 

ответ

22

$set вариант будет быстрее, так как $pull придется делать расчеты на массивах. Я даже не уверен, будет ли это работать, поскольку вы не удаляете какие-либо элементы с вашим запросом.

3

Просто убедитесь, что вам нужно хранить пустой массив? Потому что иначе, вероятно, лучше $unset.

Если вы должны держать пустой массив, я полагаю, ваш $pull вызов не будет работать - я думаю это удалит все пустые элементы из вашего массива, а не все элементы.

2

Согласно официальному документу MongoDB в:

При использовании $, чтобы соответствовать элементу массива, $ незаданы заменяет соответствующего элемент с нулевым, а не удаляя соответствующий элемент из массива. Это поведение сохраняет согласованный размер массива и позиции позиций .

$ set должен быть надлежащим образом.

Смежные вопросы