我正在创建一个要包含聊天功能的应用程序。我要做的最后一件事是显示每个对话的最新消息(包括我发送的消息)。
我的Db看起来像这样
[
{
_id: 5f9b06cdb5d5eb3b94f066e3
from: "5f860655e3fc7f43709cc408"
to: "5f8b0a941efeb42a24f1f926"
message: "123"
createdAt: 2020-10-29T18:15:41.424+00:00
updatedAt: 2020-10-29T18:15:41.424+00:00
__v: 0
},
{
_id: 5f9b0761b5d5eb3b94f066e5
from: "5f860655e3fc7f43709cc408"
to: "5f8b0a941efeb42a24f1f926"
message: "321"
createdAt: 2020-10-29T18:15:41.424+00:00
updatedAt: 2020-10-29T18:15:41.424+00:00
__v: 0
}
]
我想要实现的结果:
[
{
message: '123',
createdAt: 2020-10-29T18:15:41.424+00:00,
from: "5f860655e3fc7f43709cc408"
}
]
答案 0 :(得分:1)
Chat.findOne({_ id:0,消息:1,createdAt:1,from:1})。sort({createdAt:-1})
答案 1 :(得分:0)
我认为您需要这样的东西:
db.collection.aggregate([
{
"$sort": {
"createdAt": -1
}
},
{
"$project": {
"_id": 0,
"message": 1,
"createdAt": 1,
"from": 1
}
},
{
"$limit": 1
}
])
sort
用于按日期排序。在这种情况下,以最新日期为准。
project
仅使用这些字段。
limit
仅获得第一个。
Mongo PlayGround示例here
编辑:
如果您想通过对话进行查询(对于您的模型,我不知道该怎么做...),您可以使用$match
和类似的内容:$match {"id_conver": "..."}
例如,查询匹配的“ from”和“ to”。
db.collection.aggregate([
{
"$match": {
"from": "5f860655e3fc7f43709cc408",
"to": "5f8b0a941efeb42a24f1f926"
}
},
{
"$sort": {
"createdAt": -1
}
},
{
"$project": {
"_id": 0,
"message": 1,
"createdAt": 1,
"from": 1
}
},
{
"$limit": 1
}
])