Удаление ключа из документа 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 58

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
});

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