Удаление ключа из документа MongoDB с помощью Mongoose

Я использую Мангуста библиотека для доступа к 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} }

Кажется, у Мангуста то же самое.

редактировать

Регистрация этой пример.


может ли это быть проблемой, как с помощью

function (user)

вместо

function(err, user)

для обратного вызова находки ? Просто пытаюсь помочь с этим, так как у меня уже было дело.


Мангуст документ не является простым объектом javascript, и поэтому вы не можете использовать оператор delete.(Или unset из библиотеки' lodash').

ваши варианты должны установить doc.path = null / / undefined или использовать документ.метод toObject (), чтобы превратить Mongoose 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
});

вы можете использовать удаленный пользователь._доктор.ключ