Подтвердить что ты не робот

MongoDB - Очистка элементов во вложенном массиве

Если у меня есть вложенный массив в моей схеме, как мне сообщить MongoDB удалить его записи для определенной модели?

Схема

var UserSchema = new Schema({
  username: String,
  documents: [Number]
});

Я пробовал что-то вроде этого:

db.users.update({"username": "tom"}, {"$pullAll": {"documents": []}})

Но элементы в вложенном массиве все еще существуют.

4b9b3361

Ответ 1

Ваш код не работает, потому что $pullAll требует список элементов, которые необходимо удалить из массива. Вы пропускаете пустой массив, поэтому ничего не удаляется.

Вы можете просто установить документы для пустого массива вместо удаления всех элементов:

db.users.update({"username": "tom"}, {"$set": {"documents": []}})

Если вы хотите избежать создания массива документов, если "tom" его не имеет, проверьте, существует ли массив при выборе документа для обновления:

db.users.update({username: "tom", documents: {$exists: true}}, 
                {$set: {documents: []}})

UPDATE: Еще одна опция для удаления всех элементов массива - использовать $pull с запросом, который удовлетворяет всем документам:

db.users.update({username: "tom"}, {$pull: {documents: {$exists: true}}})