我是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和节点,所以如果有人可以帮我解释将是伟大的。
感谢您的阅读并抱歉英语不好
您必须在$group
阶段包含日期或已查看的数据。
试试这个。
{
$group:
{
_id: { tot:["$emitter", "$receiver"] },
text: { $addToSet:{text:"$text",created:"$created.created_at"}},
created_at:{$last:"$created.created_at"}
}
},
为什么有ids
并需要tot
字段和created
作为对象?