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ßlichvar 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!
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? –
Ich sehe von deiner anderen Antwort, die du repariert hast, groß :) – andresk