2014-09-10 7 views
1

Je Mongoose instance de modèle:Définition des propriétés d'instance de modèle Mongoose avec "étendre" util

var s = new Song({ 
    song_id: '123', 
    title: 'sample song', 
    artist: { 
    name: 'sample artist', 
    id: '456' 
    } 
}); 

Maintenant, je voudrais mettre/mettre à jour ses propriétés, mais en utilisant extend (par exemple à partir util._extend nodejs)

s = extend(s, { 
    title: 'changed title', 
    artist: { 
    name: 'changed artist', 
    id: '789' 
    } 
}); 

s.save(); 

Et tandis que title (en tant que propriété de niveau supérieur) est défini sur OK, les modifications dans artist ne sont pas visibles.

Je sais que je peux le mettre via:

s.artist.name = 'changed artist'; 

mais est-il quelque chose que je manque ou est cette façon de propriétés de mise à jour non utilisables?

EDIT

Gah ... On dirait que le schéma défini par quelqu'un dans le mauvais sens. Au lieu de artist champ défini comme

artist: { 
    name: String, 
    id: String 
} 

il a été défini comme

artist.name: String, 
artist.id: String 

Quand je redéfinie en cela fonctionne maintenant. Merci

Répondre

0

Ce que vous pouvez faire est d'utiliser la méthode de mise à jour Mongoose:

Song.update({ 
    song_id: '123', 
}, { 
    $set: { 
     title: 'changed title', 
     artist: { 
      name: 'changed artist', 
      id: '789', 
     }, 
    }, 
}, function(err, numAffected) { 
    ... 
}); 

Cependant, je ne vois pas vraiment pourquoi votre s'étendre tentative a échoué. Cela semble fonctionner pour moi, j'utilise habituellement la fonction _.extend de underscore.

+0

Gah ... On dirait que quelqu'un a mal défini le schéma. au lieu de 'artist: {name: String, id: String}' il était défini comme 'artist.name: String, artist.id: String'. Quand je l'ai redéfini, ça marche maintenant. Merci –

Questions connexes