2016-10-08 2 views
1

Ich habe eine Konversations-Sammlung in MongoDB, die ich von NodeJS abfrage, um die zurückgegebenen Daten zum Rendern der Konversationsseite zu verwenden.MongoDB-Abfrage gibt leeres verschachteltes Objekt zurück

Die Daten wurden in der Datenbank korrekt gespeichert, soweit ich das sehe, wenn ich sie abfrage, kommt alles wie erwartet zurück, abgesehen von ein paar verschachtelten Objekten - den zwei Benutzern, zu denen die Konversation gehört.

Hier ist, was ich bekomme, wenn ich ein Gespräch (man beachte die ‚Teilnehmer‘ Feld console.log.

[ { _id: 57f96549cc4b1211abadf28e, 
    __v: 1, 
    messages: [ 57f96549cc4b1211abadf28d ], 
    participants: { user2: [Object], user1: [Object] } } ] 

In Mongo die Teilnehmer Shell hat die richtigen Informationen - die ID und Benutzernamen für beide Teilnehmer

Hier ist das Schema:

var ConversationSchema = new mongoose.Schema({ 
    participants: { 
     user1: 
     { 
      id: String, 
      username: String 
     }, 
     user2: 
     { 
      id: String, 
      username: String 
     }, 
    }, 
    started: Number, 
    messages: [ 
    { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: "Message" 
    } 
    ] 
}); 

Hier ist die Schaffung des Gesprächs Dokument:

schließlich
var conv = { 
    participants : { 
    "user1" : { 
     "id" : req.body.senderId, 
     "username" : req.body.senderName 
    }, 
    "user2" : { 
     "id" : req.body.recipientId, 
     "username" : req.body.recipientName 
    } 
    }, 
    created : Date.now(), 
    messages : [] // The message _id is pushed in later. 
} 
Conversation.create(conv, function(err, newConvo){ 
    if(err){ 
    console.log(err); 
    } else { 
    newConvo.messages.push(newMessage); 
    newConvo.save(); 
    } 
}) 

Und, falls es sinnvoll ist, hier ist die Abfrage zu Mongo:

// view all conversations a user belongs to 
app.get('/messages', function(req, res){ 
    Conversation.find({ 
    $or : [ 
     {"participants.user1.id" : req.user._id}, 
     {"participants.user2.id" : req.user._id} 
    ] 
    }, function(err, convos){ 
    if(err){ 
     console.log('Error getting Convos ' + err) 
    } else { 
     res.render('messages', {convos: convos, currentUser: req.user}); 
    } 
    }); 
}); 

Vielen Dank für jede Hilfe, dass!

Antwort

1

Es scheint, dass alles in Ordnung ist, die console.log druckt nur verschachtelte Objekte standardmäßig nicht. Versuchen Sie mit:

console.log(JSON.stringify(conversation)) 

Beim Protokollieren einer Konversation, um die Teilnehmer Objekte zu sehen.

+0

Vielen Dank Andresk. Du hast Recht, wenn ich es stringfe, bekomme ich die Daten, die ich erwarte. Wenn ich es jedoch an die Client-Seite übergebe, kann ich nichts damit anfangen. Muss ich es stringifizieren und es in ein JS-Objekt zurückstellen, bevor es an den Client übergeben wird? –

+0

Ich sehe von deiner anderen Antwort, die du repariert hast, groß :) – andresk

0

Fehler behoben!

Andresks Antwort war ein großer Schub in die richtige Richtung. Wie er sagte, alles war in Ordnung, aber ich habe nicht auf das zurückgegebene Objekt in der richtigen Weise zugegriffen. Jetzt ist es offensichtlich, aber ich habe die Indexnummer für das Convos-Objekt nicht angegeben.

ich einfach notwendig, um dies zu tun, auch wenn ich nur ein ‚Gespräch‘ Dokument wieder von MongoDB bekommen:

console.log(convos[0].participants.user1.username); 
Verwandte Themen