MongoDB-узел: узел объединения-запрос mongo для чата

#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 мои сообщения этому человеку, и в данный момент я не знаю, сколько людей мне пишут), и у меня нет схемы чата,, поэтому я думаю, что то, что я пытался, было невозможно сделать. Прости за то, что так сложно понять, что мне нужно