我正在为我的项目使用MongoDB和Mongoose。 我有一个消息集合,用于在客户和管理员池之间存储消息。客户生成问题,管理员生成回复。数据结构如下:
{
"_id" : ObjectId("56fa0b9c98868ee59a6981f8"),
"from" : ObjectId("56c3623801582ce05d5fe870"),
"value" : "Question 1???",
"date" : ISODate("2016-03-29T04:59:08.799Z"),
},
{
"_id" : ObjectId("56fa0bb198868ee59a6981f9"),
"from" : ObjectId("56f90ce398868ee59a6981ee"),
"value" : "Question A?",
"date" : ISODate("2016-03-29T04:59:29.769Z"),
},
{
"_id" : ObjectId("56fa0bcf2c8db147579f5a51"),
"to" : ObjectId("56c3623801582ce05d5fe870"),
"from" : ObjectId("56c167d1912bdff65bc0644b"),
"value" : "Answer 1",
"date" : ISODate("2016-03-29T04:59:59.320Z"),
}
在上面的示例中,我们有3条消息:
我需要列出并计算未回答的问题。
更新: 这足以让我获得#34;客户(而不是管理员)发送的消息列表,而不是t稍后会有管理员回复"
从上一个查询中我已经有一个Admin Ids(objectIdArray)数组,所以我可以检查一条消息是否来自一个带有以下表达式的管理员:
{from: {$in: objectIdArray}}
我试图用一个查询来解决所有问题:
Custmsg.aggregate([
{$match: { $and: [ {archiveDate: {$exists: false}} ] } },
{$group: { _id: {'from': '$from', 'to': '$to'},
info: {
$push: { lastMessage: '$date',
lastValue: '$value',
to: '$to'
}
}
}
},
{$sort: {lastMessage: -1}}
])
得到这个结果:
[
{
"_id":{
"from":"56c167d1912bdff65bc0644b",
"to":"56c3623801582ce05d5fe870"
},
"info":[
{
"lastMessage":"2016-03-29T04:59:59.320Z",
"lastValue":"Answer 1",
"to":"56c3623801582ce05d5fe870"
}
]
},
{
"_id":{
"from":"56f90ce398868ee59a6981ee"
},
"info":[
{
"lastMessage":"2016-03-29T04:59:29.769Z",
"lastValue":"Question A?"
}
]
},
{
"_id":{
"from":"56c3623801582ce05d5fe870"
},
"info":[
{
"lastMessage":"2016-03-29T04:59:08.799Z",
"lastValue":"Question 1???"
}
]
}
]
但我不知道如何完成。 是否可以在单个查询中执行此操作,或者您将如何执行此操作?