2013-08-03 6 views
1

je le schéma suivant:mangouste enregistrer intégré le document

var StorySchema = new Schema({ 
    title:  { type: String, required: true }, 
    users:  { 
        id:  { type: Schema.ObjectId, ref: 'Users' }, 
        creator: { type: Boolean } 
       },  
    maxlines:  { type: Number, default: '10'}, 
    lines:  { 
        text:  { type: String }, 
        entered_at: { type: Date }, 
        user:  { 
           id: { type: Schema.ObjectId, ref: 'Users' } 
           } 
       }, 
    created_date: { type: Date, default: Date.now }, 
    updated_date: { type: Date, default: Date.now },   
}) 

Je veux pousser les données dans lines et je essaie de le faire avec la mise à jour ci-dessous:

exports.update = function (req, res) { 
    Stories 
    .findOne({ _id: req.params.id }, function (err, story) { 
      if (err) { 
       res.json(200, { 
        success: "false", 
        message: err.message 
       }) 
      } else {  
     story.maxlines = story.maxlines - 1 
     story.lines.push ({ 
      text : req.body.text, 
      'user.id' : req.headers.id, 
      entered_at : new Date().toISOString() 
     }) 
     story.save(function(err, story) { 
       if (err) { 
       res.json(200, { 
        success: "false", 
        message: err.message 
       }) 
      } else if (story) { 
       res.json({ 
        sucess: "true", 
        message: story 
       }) 
      } 
     }) 
     } 

    }) 

} 

Je reçois une erreur de TypeError: Object { user: {} } has no method 'push', pas tout à fait sûr comment mettre à jour les lignes et l'utilisateur associé à la ligne

Répondre

1

Parce que story.lines n'est pas un tableau. Vous devez probablement mettre à jour le schéma pour convertir les lignes de type Array, de cette façon:

var LineSchema = new Schema({ 
    text: { 
     type: String 
    }, 
    entered_at: { 
     type: Date 
    }, 
    user: { 
     id: { 
      type: Schema.ObjectId, 
      ref: 'Users' 
     } 
    } 
}); 

var StorySchema = new Schema({ 
    title: { 
     type: String, 
     required: true 
    }, 
    users: { 
     id: { 
      type: Schema.ObjectId, 
      ref: 'Users' 
     }, 
     creator: { 
      type: Boolean 
     } 
    }, 
    maxlines: { 
     type: Number, 
     default: '10' 
    }, 
    lines: [LineSchema], 
    created_date: { 
     type: Date, 
     default: Date.now 
    }, 
    updated_date: { 
     type: Date, 
     default: Date.now 
    }, 
}) 
+0

Ah qui semble être, donc la façon dont je les lignes et les utilisateurs modifiés ne permettra pas à des entrées multiples parce qu'ils ne sont pas considérés comme des tableaux? Donc je devrais changer tous les schémas pour suivre le même modèle où je m'attends à ce qu'il y ait plusieurs enregistrements? – Tam2

+0

Correct. Vous pouvez seulement faire 'push' sur un Array mais pas sur un objet général – zsong

+0

Sur mon StorySchema j'ai aussi' Users: 'qui est actuellement rempli avec''id 'où le 'id' est peuplé comme un' _id' depuis le table des utilisateurs. Mais il peut y avoir plusieurs utilisateurs pour une histoire. Cependant, si je le change en '[UserSchema]' cela signifie que je vais devoir stocker les détails de l'utilisateur complet dont je ne veux pas. Recommanderiez-vous que je crée un autre '[UserStorySchema]' qui a juste 'id' comme quelque chose comme un type de schéma de pont ou y at-il un meilleur moyen? – Tam2

Questions connexes