Удаление ключа из документа MongoDB с помощью Мангуста
Я использую Мангуста библиотека для доступа к MongoDB с узлом.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();
});
7 ответов:
В ранних версиях вам нужно было бы сбросить драйвер node-mongodb-native. Каждая модель имеет объект коллекции, содержащий все методы, которые предлагает node-mongodb-native. Таким образом, вы можете сделать действие, о котором идет речь:
User.collection.update({_id: user._id}, {$unset: {field: 1 }});
начиная с версии 2.0 вы можете сделать:
User.update({_id: user._id}, {$unset: {field: 1 }}, callback);
и начиная с версии 2.4, если у вас уже есть экземпляр модели, вы можете сделать:
doc.field = undefined; doc.save(callback);
вы хотите сделать это:
User.findOne({}, function(err, user){ user.key_to_delete = undefined; user.save(); });
Я использую мангуст и с помощью любой из вышеперечисленных функций сделал мне требование. Функция компилируется без ошибок, но поле все равно останется.
user.set('key_to_delete', undefined, {strict: false} );
сделал трюк для меня.
в синтаксисе mongo для удаления некоторого ключа вам нужно сделать следующее:
{ $unset : { field : 1} }
Кажется, у Мангуста то же самое.
Edit
Регистрация этой пример.
может ли это быть проблемой, как с помощью
function (user)
вместо
function(err, user)
для обратного вызова находки ? Просто пытаюсь помочь с этим, как у меня уже было дело.
документ мангуста не является простым объектом javascript, и именно поэтому вы не можете использовать оператор delete.(Или
unset
из библиотеки "лодаш").ваши параметры должны установить doc.path = null / / undefined или использовать документ.toObject () метод, чтобы превратить Мангуст doc в обычный объект и оттуда использовать его как обычно. Подробнее в Мангуст api-ref: http://mongoosejs.com/docs/api.html#document_Document-toObject
пример будет выглядеть так это:
User.findById(id, function(err, user) { if (err) return next(err); let userObject = user.toObject(); // userObject is plain object });