2016-10-08 10 views
1

返されたデータを使用して会話のページをレンダリングするために、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}); 
    } 
    }); 
}); 

おかげでたくさん!

答えて

1

すべてが問題ないようですが、console.logはデフォルトでネストされたオブジェクトを印刷しません。試してみてください:

console.log(JSON.stringify(conversation)) 

参加者オブジェクトを見るために会話をログに記録するとき。

+0

どうもありがとうAndreskを:私は唯一の「会話」文書バックにMongoDBからなっていたにもかかわらず、

私は単純に、これを行うために必要な。あなたは正しい、私はそれを文字列化するとき、私は期待しているデータを取得します。それでもクライアント側に渡すと、何もできません。それを文字列化してクライアントに渡す前にJSオブジェクトに戻す必要がありますか? –

+0

私はあなたの他の答えから、あなたが固定されていることが分かります。 – andresk

0

修正済み!

上記のAndreskの答えは、正しい方向に大きく押し進められました。彼が言ったように、すべてはOKでしたが、私は返されたオブジェクトに正しい方法でアクセスしていませんでした。今は明らかですが、私は 'convos'オブジェクトのインデックス番号を提供していませんでした。

console.log(convos[0].participants.user1.username); 
関連する問題