Я использую библиотеку Mongoose для доступа к MongoDB с помощью node.js
Есть ли способ удалить ключ из документа ? т.е. не просто установить значение null, а удалить его?
User.findOne({}, function(err, user){
//correctly sets the key to null... but it's still present in the document
user.key_to_delete = null;
// doesn't seem to have any effect
delete user.key_to_delete;
user.save();
});
mongodb
node.js
mongoose
document-database
Дэниел Бердсли
источник
источник
Ответы:
В ранних версиях вам нужно было выпустить драйвер node-mongodb-native. У каждой модели есть объект коллекции, содержащий все методы, которые предлагает node-mongodb-native. Итак, вы можете выполнить рассматриваемое действие следующим образом:
Начиная с версии 2.0 вы можете:
А начиная с версии 2.4, если у вас уже есть экземпляр модели, вы можете:
источник
User.update({ _id: id }, { $unset: { field: 1 }}, callback)
либо, если у вас есть экземпляр документа, установите для пути значение undefined и затем сохраните его:doc.field = undefined; doc.save()
doc.set('field', undefined)
doc.field.foo
?doc.set('field', undefined)
может быть недостаточно, поскольку строгий режим (по умолчанию) не позволяет устанавливать поля, которых больше нет в схеме.doc.set('field', undefined, { strict: false })
работал нормально.Вы захотите сделать это:
источник
Я использую мангуст, и использование любой из вышеперечисленных функций сделало меня необходимым. Функция компилируется без ошибок, но поле все равно остается.
сделал трюк для меня.
источник
В синтаксисе mongo для удаления некоторого ключа вам нужно сделать следующее:
Похоже, у Мангуста то же самое.
редактировать
Посмотрите этот пример.
источник
Может ли это быть побочной проблемой, например, с использованием
вместо того
для обратного вызова находки? Просто пытаюсь помочь с этим, так как у меня уже был случай.
источник
Документ Mongoose НЕ является простым объектом javascript, поэтому вы не можете использовать оператор удаления (или
unset
из библиотеки lodash).Ваши варианты - установить doc.path = null || undefined или использовать метод Document.toObject (), чтобы превратить документ мангуста в простой объект и оттуда использовать его как обычно. Подробнее читайте в mongoose api-ref: http://mongoosejs.com/docs/api.html#document_Document-toObject
Пример будет выглядеть примерно так:
источник
Пытаться:
источник
проблема со всеми этими ответами в том, что они работают для одного поля. например, скажем, я хочу удалить все поля из моего документа, если они были пустой строкой
""
. Сначала вы должны проверить, является ли поле пустой строкой, поместите ее в$unset
:источник
если вы хотите удалить ключ из коллекции, попробуйте этот метод. это сработало для меня
источник
вы можете использовать delete user._doc.key
источник