我正在尝试创建一个MongoDB查询,以使两个用户之间进行对话。基本上,我的对话对象如下:
{
"_id" : ObjectId("123"),
"from" : ObjectId("456"),
"to" : ObjectId("789"),
"content" : "Hi!",
"createdAt" : 1558037545568.0
}
我想按createdAt
降序排列他们的对话,并将他们的用户对象聚集在一起。我知道我需要在$lookup
查询中使用users
进行搜索,但是我有一些疑问:
$lookup
操作来同时带动两个用户?456
是from
用户而有时是to
用户的方式来管理它?与用户789
相同。我没有得到太多。这是当前查询,它使所有排序的内容都没有用户对象:
db.getCollection('messages').aggregate([{
$match: {
$or: [
{ from: ObjectId("456") },
{ to: ObjectId("789") },
{ from: ObjectId("789") },
{ to: ObjectId("456") }
]
}
}, {
$sort: { createdAt: -1 }
}])
谢谢大家的帮助!
答案 0 :(得分:2)
您可以通过添加newText
数组来“规范化”文档,该数组将包含users
和from
升序排列。然后,在该数组上运行to
(对参数排序)会更容易,
$match
$lookup可以直接在数组上运行,因此以下语法应作为下一步:
db.collection.aggregate([
{
$addFields: {
users: [ { $min: [ "$from", "$to" ] }, { $max: [ "$from", "$to" ] } ]
}
},
{
$match: { users: [ "456", "789" ] }
}
])