Estou usando a Biblioteca Mongoose para acessar MongoDB com node.js
Existe uma maneira de remover uma chave de um documento ? ou seja, não apenas definir o valor como nulo, mas removê-lo?
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
Daniel Beardsley
fonte
fonte
Respostas:
Nas versões anteriores, você teria que remover o driver node-mongodb-native. Cada modelo possui um objeto de coleção que contém todos os métodos que o node-mongodb-native oferece. Portanto, você pode fazer a ação em questão desta forma:
Desde a versão 2.0, você pode fazer:
E desde a versão 2.4, se você já tem uma instância de um modelo, você pode fazer:
fonte
User.update({ _id: id }, { $unset: { field: 1 }}, callback)
ou se você tiver uma instância de documento, defina o caminho como indefinido e salve-o:doc.field = undefined; doc.save()
doc.set('field', undefined)
doc.field.foo
?doc.set('field', undefined)
pode não ser suficiente, pois o modo estrito (padrão) não permite definir campos que não estão mais no esquema.doc.set('field', undefined, { strict: false })
funcionou bem.Você vai querer fazer isso:
fonte
Eu uso o mangusto e usar qualquer uma das funções acima atendeu ao requisito. A função compila sem erros, mas o campo ainda permaneceria.
fez o truque para mim.
fonte
Na sintaxe do mongo, para excluir alguma chave, você precisa fazer o seguinte:
Parece o mesmo em Mongoose.
Editar
Veja este exemplo.
fonte
Pode ser um problema colateral como usar
ao invés de
para o retorno de chamada do achado? Só estou tentando ajudar, pois já tinha o caso.
fonte
O documento Mongoose NÃO é um objeto javascript simples e é por isso que você não pode usar o operador delete (ou
unset
da biblioteca 'lodash').Suas opções são definir doc.path = null || undefined ou para usar o método Document.toObject () para transformar o documento mongoose em um objeto simples e, a partir daí, usá-lo normalmente. Leia mais em mongoose api-ref: http://mongoosejs.com/docs/api.html#document_Document-toObject
O exemplo seria mais ou menos assim:
fonte
Experimentar:
fonte
o problema com todas essas respostas é que elas funcionam para um campo. por exemplo, digamos que eu queira excluir todos os campos do meu documento se eles fossem uma string vazia
""
. Primeiro você deve verificar se o campo é uma string vazia e colocá-lo em$unset
:fonte
se você deseja remover uma chave da coleção, tente este método. isso funcionou para mim
fonte
você pode usar delete user._doc.key
fonte