MongoDb-Node:聚集节点-mongo聊天查询

时间:2019-03-14 18:13:37

标签: 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 个答案:

答案 0 :(得分:0)

您必须在$group阶段添加日期或查看的数据。

尝试一下。

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

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