#node.js #mongodb #express #mongoose #database
#node.js #MongoDB #выразить #мангуст #База данных
Вопрос:
У меня есть коллекция ‘conversations’ в MongoDB, которую я запрашиваю у NodeJS, чтобы использовать возвращенные данные для отображения страницы беседы.
Данные были сохранены в базе данных правильно, насколько я могу видеть, когда я запрашиваю его, все возвращается, как я и ожидал, за исключением пары вложенных объектов — двух пользователей, которым принадлежит диалог.
Вот что я получаю при консоли.запишите беседу (обратите внимание на поле «участники»:
[ { _id: 57f96549cc4b1211abadf28e,
__v: 1,
messages: [ 57f96549cc4b1211abadf28d ],
participants: { user2: [Object], user1: [Object] } } ]
В оболочке Mongo у участников есть правильная информация — идентификатор и имя пользователя для обоих участников.
Вот схема:
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();
}
})
И, наконец, на случай, если это полезно, вот запрос к 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});
}
});
});
Большое спасибо за любую помощь!
Ответ №1:
Кажется, что все в порядке, console.log
just не печатает вложенные объекты по умолчанию. Попробуйте использовать:
console.log(JSON.stringify(conversation))
При регистрации разговора, чтобы увидеть объекты участников.
Комментарии:
1. Большое спасибо Andresk. Вы правы, когда я его строю, я получаю ожидаемые данные. Тем не менее, когда я передаю его на сторону клиента, я ничего не могу с этим поделать. Должен ли я упорядочить его и поместить обратно в объект JS перед передачей его клиенту?
2. Я вижу из вашего другого ответа, который вы исправили, отлично 🙂
Ответ №2:
Исправлено!
Ответ Андреска выше был большим толчком в правильном направлении. Как он сказал, все было в порядке, но я неправильно обращался к возвращаемому объекту. Теперь это очевидно, но я не указывал номер индекса для объекта ‘convos’.
Мне просто нужно было это сделать, хотя я получал только один документ «беседы» из MongoDB:
console.log(convos[0].participants.user1.username);