2011-12-09 9 views
2

J'ai donc un objet dans la BD qui est essentiellement un article de blog, il y a un tableau d'ObjectID qui fait référence à la collection de Catégories.Mongoose/MongoDB - Enregistrement d'un enregistrement pour remplacer les données actuelles:

Alors

Posts = { 
    title: String, 
    Content: String, 
    Categories: [{ 
     type: ObjectID, 
     ref: 'Categories' 
    }] 

Je peux créer des postes très bien, problème vient lorsque je tente de les mettre à jour:

post.title = 'hi'; 
post.content = 'content'; 
post.categories = ['44523452525','4e1342413421342']; 

post.save(function(){}); 

Pour une raison quelconque, il inscrira ces 2 catégories au lieu d'effacer le tableau des catégories et en insérant ceux-ci.

Comment puis-je l'enlever et en insérer de nouveaux?

+0

Avez-vous déjà trouvé une solution à ce problème? Je suis témoin du même comportement sur mon système, avec Mongoose 3.0.0. Une note intéressante: définir le champ de tableau à un tableau vide ([]) semble fonctionner. – Aaron

Répondre

5

J'ai essayé de reproduire ce comportement, mais je ne pouvais pas - voici l'exemple de code j'ai couru:

var mongoose = require('mongoose') 
var Schema = mongoose.Schema 

mongoose.connect('mongodb://localhost/testjs'); 

PostSchema = new Schema({ 
    title:String, 
    content:String, 
    cats:[] 
}); 
var Post = mongoose.model('Post', PostSchema); 

var mypost = new Post() 
mypost.title = "x" 
mypost.content = "y" 
mypost.cats = ['a','b','c'] 
mypost.save(
    function(err){ 
    mypost.cats = ['d','e'] 
    mypost.save() 
    } 
); 

Après le deuxième appel à enregistrer() le tableau ne contient que ce qu'il a été réglé sur ("d "," e "). Pouvez-vous l'essayer et voir si vous obtenez le même résultat? Peut-être que c'est lié à la version de mangouste, ou quelque chose.

Questions connexes