#javascript #node.js #mongodb
#javascript #node.js #mongodb
Вопрос:
я новичок в mongo и хочу получить данные для чата, позвольте мне объяснить.
у меня есть коллекция сообщений:
_id:id
viewed:boolean
created_at:date
text:String
receiver:ObjectId
emitter:ObjectId
я хочу получить весь список сообщений для определенного порядка отправителя и получателя по дате (как в обычном чате)
я пробовал агрегацию следующим образом:
db.messages.aggregate(
[
{
$lookup: {
from: "users",
localField: "emitter", // field in the orders collection
foreignField: "_id", // field in the items collection
as: "fromItems"
}
},
{
$match: {
'emitter':ObjectId("5c8917b4ef9ebf2e608c68dc")
}
}
,
{
$addFields: {
ids: { _id: "$_id" } ,
created: { created_at: "$created_at" }
}
},
{
$group:
{
_id: { tot:["$emitter", "$receiver"] },
text: { $addToSet:"$text"},
}
},
{
$sort: {created_at: 1}
}
]
)
Но это дает мне массив сообщений только определенного отправителя и не дает мне дату или просмотренные данные.
Я действительно новичок в mongo и node, поэтому, если кто-то может помочь мне с объяснением, будет здорово.
Спасибо за чтение и извините за плохой английский
Ответ №1:
Вы должны включить дату или просмотренные данные на $group
этапе.
Попробуйте с этим.
{
$group:
{
_id: { tot:["$emitter", "$receiver"] },
text: { $addToSet:{text:"$text",created:"$created.created_at"}},
created_at:{$last:"$created.created_at"}
}
},
Почему существуют ids
и нужны tot
поля и created
как объект??
Комментарии:
1. привет, спасибо, это сработало, было полезно отметить, что мне нужна другая схема, чтобы все сообщения были частью чата (потому что мне нужны в json мои сообщения этому человеку, и в данный момент я не знаю, сколько людей мне пишут), и у меня нет схемы чата,, поэтому я думаю, что то, что я пытался, было невозможно сделать. Прости за то, что так сложно понять, что мне нужно