【问题标题】:MongoDb find documents based on values comparison of two fieldsMongoDb 根据两个字段的值比较查找文档
【发布时间】:2023-02-21 18:31:13
【问题描述】:
我正面临挑战。我们先看文档
{
"FullName": "Sarajane Cazares",
"FromTime": "2023-02-21T19:00:00Z",
"ToTime": "2023-02-21T20:00:00Z",
...
}
{
"FullName": "Marissa",
"FromTime": "2023-02-21T20:00:00Z",
"ToTime": "2023-02-21T21:00:00Z",
...
}
如您所见,doc1 的 ToTime 和 doc2 的 FromTime 相同。我需要找到 ToTime 和 FromTime 值相同的所有文档。
可以使用 MongoDB 吗?
谢谢
【问题讨论】:
标签:
mongodb
mongodb-query
【解决方案1】:
恐怕,通过简单的匹配是不可能的,但你可以为它编写一个简短的聚合管道。尝试这个:
db.collection.aggregate([
{
"$lookup": {
"from": "collection",
"localField": "ToTime",
"foreignField": "FromTime",
"as": "docs"
}
},
{
"$match": {
$expr: {
"$gt": [
{
"$size": "$docs"
},
0
]
}
}
},
])
在此管道中,我们对集合执行自连接,比较 ToTime 和 FromTime 字段。然后我们只是过滤掉文档,其中不存在具有相同 ToTime 和 FromTime 的文档。
Playground link.