Usuwanie klucza z dokumentu MongoDB przy użyciu Mongoose


Korzystam z biblioteki

Mongoose
https://github.com/LearnBoost/mongoose
aby uzyskać dostęp do MongoDB przy użyciu node.js
Czy istnieje sposób

usuń klucz z dokumentu

? tj. nie tylko ustawione na null, ale je usunąć?
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();
});

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

We wcześniejszych wersjach trzeba było zresetować sterownik node-mongodb-native. Każdy model ma obiekt kolekcji zawierający wszystkie metody oferowane przez node-mongodb-native. Możesz więc wykonać daną czynność w następujący sposób:
User.collection.update({_id: user._id}, {$unset: {field: 1 }});

Od wersji 2.0 możesz:
User.update({_id: user._id}, {$unset: {field: 1 }}, callback);

A od wersji 2.4, jeśli masz już instancję modelu, możesz to zrobić:
doc.field = undefined;
doc.save(callback);
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Chcesz to zrobić:
User.findOne({}, function(err, user){
user.key_to_delete = undefined;
user.save();
});
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Używam mangusty i jedna z powyższych funkcji spełniła moje wymagania. Funkcja kompiluje się bez błędów, ale pole pozostanie.
user.set('key_to_delete', undefined, {strict: false} );

zrobił dla mnie tę sztuczkę.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W składni mongo, aby usunąć jakiś klucz, musisz wykonać następujące czynności:
{ $unset : { field : 1} }

Wydaje się, że tak samo jest w Mongoose.

Edytować

Czek

to
http://www.mischievous.org/201 ... .html
przykład.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Czy może to być problem poboczny, taki jak używanie
function (user)

zamiast
function(err, user)

znaleźć oddzwonienie? Po prostu próbuję w tym pomóc, ponieważ miałem już tę sprawę.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dokument Mongoose NIE jest zwykłym obiektem javascript i dlatego nie możesz użyć operatora usuwania (lub
unset
z biblioteki 'lodash').
Masz do wyboru ustawienie doc.path = null |/undefined lub użyj metody Document.toObject (), aby zamienić dokument mongoose w zwykły obiekt i stamtąd używać go jak zwykle.
Przeczytaj więcej w mongoose api-ref:

http://mongoosejs.com/docs/api ... bject
http://mongoosejs.com/docs/api ... bject
Przykład mógłby wyglądać mniej więcej tak:
User.findById(id, function(err, user) {
if (err) return next(err);
let userObject = user.toObject();
// userObject is plain object
});
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Próbować:
User.findOne({}, function(err, user){
// user.key_to_delete = null; X
`user.key_to_delete = undefined;` delete user.key_to_delete; user.save();
});
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


jeśli chcesz usunąć klucz z kolekcji, wypróbuj tę metodę.

to działało dla mnie


db.getCollection('myDatabaseTestCollectionName').update({"FieldToDelete": {$exists: true}}, {$unset:{"FieldToDelete":1}}, false, true);
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Problem z tymi wszystkimi odpowiedziami polega na tym, że działają one w tym samym obszarze. na przykład, przypuśćmy, że chcę usunąć wszystkie pola z mojego dokumentu, jeśli byłyby pustym ciągiem znaków
""
.
Powinieneś najpierw sprawdzić, czy pole jest pustym ciągiem, umieszczając je w
$ unset
:
function unsetEmptyFields(updateData) {
const $unset = {};
Object.keys(updatedData).forEach((key) => {
if (!updatedData[key]) {
$unset[key] = 1;
delete updatedData[key];
}
});
updatedData.$unset = $unset; if (isEmpty(updatedData.$unset)) { delete updatedData.$unset; } return updatedData;
}function updateUserModel(data){
const updatedData = UnsetEmptyFiled(data); const Id = "";
User.findOneAndUpdate( { _id: Id },
updatedData, { new: true },
);
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

możesz użyć
delete user._doc.key

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się