返されたデータを使用して会話のページをレンダリングするために、NodeJSからクエリしているMongoDBに 'conversations'コレクションがあります。MongoDBクエリで空のネストされたオブジェクトが返される
データはデータベースに正しく保存されています。私は、会話が属する2人のネストされたオブジェクトを除いて、私が期待していたすべてのものを元に戻します。ここで
は、私は会話(「参加者のフィールドに注意してくださいCONSOLE.LOGときに私が得るものです:モンゴで
[ { _id: 57f96549cc4b1211abadf28e,
__v: 1,
messages: [ 57f96549cc4b1211abadf28d ],
participants: { user2: [Object], user1: [Object] } } ]
を参加者をシェルに正しい情報がある - 両方の参加者のためのIDとユーザー名を
。ここで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"
}
]
});
が対話ドキュメントの作成です:
ここでは、スキーマのです
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();
}
})
そして最後に、ケースにそれは便利ですが、ここではモンゴへのクエリがあります:その任意の助け
// 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});
}
});
});
おかげでたくさん!
どうもありがとうAndreskを:私は唯一の「会話」文書バックにMongoDBからなっていたにもかかわらず、
私は単純に、これを行うために必要な。あなたは正しい、私はそれを文字列化するとき、私は期待しているデータを取得します。それでもクライアント側に渡すと、何もできません。それを文字列化してクライアントに渡す前にJSオブジェクトに戻す必要がありますか? –
私はあなたの他の答えから、あなたが固定されていることが分かります。 – andresk