2012-03-28 14 views
6

Mam dość problem, gdy próbuję zaktualizować osadzony dokument w mongodb. Próbowałem dwóch metod i nie pracowałem, a szukałem wszędzie, z powodów, dla których nie jest to aktualizacja. W każdym razie, mój schemat wygląda tak (mogę zauważyć, że osadzony dokument, który próbuję zaktualizować, jest typu mieszanego).Mongoza nie aktualizuje dokumentu osadzonego

var UserModel = new mongoose.Schema({ 
    account: String, 
    salt: String, 
    password: String, 
    highlight_words: String, 
    networks: {}, 
    ip: String, 
    ident: String, 
    is_connected: Boolean, 
    account_type: String 
}); 

Próbowałem zaktualizować "sieci" z tymi dwoma fragmentami kodu i nic nie działa. Już wyciągnę włosy.

self.userModel.update({account: key}, {networks: self.client_data[key]['networks']}, function(err) {}); 

A (uwaga, że ​​próbowałem dodanie oddzwanianie do save(), i wykonuje bez błędu)

self.userModel.findOne({account: key}, function(err, doc) { 
    doc.networks = self.client_data[key]['networks']; 
    doc.markModified('networks').save(); 
}); 

Każda pomoc będzie mile widziana! Dzięki!

Edit:

Problem polegał na tym, że obiekt był jak tak {'some.thing': {more: 'stuff'}} oczywiście nie lubił. co jest zrozumiałe!

+0

Jaka jest wartość 'self.client_data [key] [ 'sieci']'? Spróbuj zastąpić go literałami, aby pomóc w debugowaniu. – paulmelnikow

+0

To dość duży obiekt, wiem na pewno, że jest zaludniony. Próbowałem zastąpić go 'doc.networks = {test: 123};' i to wciąż nie zapisało dokumentu .. – rickibalboa

+0

W pierwszej wersji też, zgaduję? Jest szansa, że ​​po prostu nic nie pasuje? Czy 'delete ({account: key})' działa? – paulmelnikow

Odpowiedz

11

Wypróbuj doc.markModified('networks');. Wygląda na to, że networks to typ bezoptymalny. Mongoose nie może automatycznie wykryć zmian w typach bezprofesjonalnych.

+0

uratowałeś mi życie – Unitech

+0

jesteś moim bohaterem! –

+0

Awsome man to pracował dla mnie :) –

2

Musisz zdefiniować swój schemat, aby to zadziałało. Na przykład:

Sieci { typu "string" }