2017-06-14 6 views
0

Ich bin neu in Mongo und Express. Ich baue eine einfache App, in der ein Unternehmen eine Frage an seine Mitarbeiter sendet, die um Feedback bitten. Ich bemühe mich, Mitarbeiter (Benutzer) in das Fragedokument als ein Array zu stellen. Hier sind meine Schemata [nicht sicher, ob ich sie richtig geschrieben habe].POST-Daten speichert keine Arrays

//question schema 
var QuestionSchema = Schema({ 
    id   : ObjectId, 
    title  : String, 
    employees : [{ type: ObjectId, ref: 'User'}] 
}); 

module.exports = mongoose.model('Question', QuestionSchema); 

//user schema 
var UserSchema = Schema({ 
    username : String, 
    response : String, 
    questions : [{ type: ObjectId, ref: 'Question'}] 
}); 

module.exports = mongoose.model('User', UserSchema); 

api.js

router.post('/', function (req, res) { 
    // make sure user is authenticated 
    User.findOne({ username: req.body.username }).exec(function(err, user) { 
     if(err) throw err; 

     if(!user) { 
      res.json({ success: false, message: 'Could not authenticate user' }) 
     } else if (user){ 

      /*----------------save example----------------------*/ 
      var question = new Question({ title: 'Should we buy a coffee machine?'}); 

      question.save(function (err) { 
       if (err) throw err; 

       var user1 = new User({ 
        username: "marcopolo", 
        response: "yes", 
       }); 

       user1.save(function (err) { 
        if (err) throw err; 
       }); 
      }); 

      console.log('entry saved >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'); 
     } 
    }); 
}); 

enter image description here

UPDATE (Mitarbeiter Tabelle)

enter image description here

+0

Sind Sie sicher, dass die automatisch implementierte ID im QuestionSchema funktioniert? Ich beziehe mich auf'ObjectId' – Jesper

+0

@Jesper ja. Ich habe den zweiten Schnappschuss hinzugefügt, um zu zeigen, dass die Tabelle der Mitarbeiter das gleiche Problem hat. Zeigt nicht die Fragen an, die im Fragen-Array beantwortet wurden –

Antwort

2

I Das liegt daran, dass Sie kein Array von Benutzerreferenzen an das Feld employees übergeben.

var question = new Question({ title: 'Should we buy a coffee machine?', employees: [array of user references]}); 

Wie Sie das vorhaben, ist eine andere Sache. Sie können das Array entweder als Post-Request übergeben, wenn Benutzer verfügbar sind. In diesem Fall wird es in req.body.employees verfügbar sein oder die IDs des Benutzers und der Frage, die Sie gerade erstellen, weitergeben.

var question = new Question({ 
    title: 'Should we buy a coffee machine?' 
}); 
var user1 = new User({ 
    username: "marcopolo", 
    response: "yes", 
}); 

question.employees = [user1._id]; 
user1.questions = [question._id]; 

question.save(function(err) { 
    if (err) throw err; 
    user1.save(function(err) { 
     if (err) throw err; 
    }); 
}); 
+0

Arbeitete! Vielen Dank. Jetzt kann ich zumindest einen Mitarbeiter im "Mitarbeiter" -Feld von "Fragen" sehen. Ich kämpfe jetzt, um weitere Mitarbeiter hinzuzufügen, selbst wenn ich eine Reihe von ihnen erstelle. Ich werde wahrscheinlich eine andere Frage stellen und diese in einem Link angeben. –