MongoDb-Node:用于聊天的Agregation node-mongo查询

问题描述 投票:0回答:1

我是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和节点,所以如果有人可以帮我解释将是伟大的。

感谢您的阅读并抱歉英语不好

javascript node.js mongodb
1个回答
0
投票

您必须在$group阶段包含日期或已查看的数据。

试试这个。

{
 $group:
 {
   _id: { tot:["$emitter", "$receiver"] },
   text: { $addToSet:{text:"$text",created:"$created.created_at"}},
   created_at:{$last:"$created.created_at"}
 }
},

为什么有ids并需要tot字段和created作为对象?

© www.soinside.com 2019 - 2024. All rights reserved.