2014-10-19 6 views
8

Mam następujący Mongoose model:Mongoose findByIdAndUpdate nie usuwa zaktualizowane właściwości

var mongoose = require('mongoose'); 

var userSchema = mongoose.Schema({ 
    facebook: { 
     name: String, 
     email: String, 
     customerId: String 
    } 
}); 

var User = mongoose.model('User', userSchema); 

Kiedy aktualizować część tego dokumentu przy użyciu findByIdAndUpdate

User.findByIdAndUpdate(id, { 
    $set: { 
     facebook: { 
      name: name 
     } 
    } 
}); 

name jest aktualizowany, a email i customerId zostaną usunięte (nieoprawny?).

Nie znalazłem tego udokumentowanego.

Czy istnieje sposób aktualizacji tylko określonych właściwości dokumentu za pomocą findByIdAndUpdate?

Odpowiedz

13

FindByIdAndUpdate jest faktycznie Wydaje polecenie aktualizacji mongodb findAndModify o identyfikator dokumentu.

Chodzi o to, że ustawiasz obiekt, aby zastąpił stary obiekt. jeśli chcesz zaktualizować pole, musisz zmodyfikować swój obiekt aktualizacji.

User.findByIdAndUpdate(id, { 
$set: { 
    'facebook.name':name  
} 
}); 

Spowoduje to aktualizację pola nazwy, pod warunkiem że obiekt odpoczynku znajduje się na poprzednim.

+0

tak, dzięki. Właśnie znalazłem to w mongotb docs. czy w ogóle muszę używać zestawu $? – krl

+0

Oczywiście tak, jeśli nie użyjesz zestawu $, który zaktualizuje dokument, tylko zaktualizuje obiekt, usuwając wszystkie stare pola. –

+1

cóż, nie ma. po prostu przetestowałem go bez zestawu w następujący sposób: User.findByIdAndUpdate (id, {'facebook.name': name}) i zachował wszystkie stare pola. – krl

Powiązane problemy