MongoDB:按顺序返回文档,直到条件匹配



在MongoDB集合中,我有一个带有"位置";用于排序的字段和可选的"字段;日期";字段,例如

[
{
"_id": "doc1",
"position": 1
},
{
"_id": "doc2",
"position": 2,
"date": "2021-05-20T08:00:00.000Z"
},
{
"_id": "doc3",
"position": 3
},
{
"_id": "doc4",
"position": 4,
"date": "2021-05-20T08:00:00.000Z"
}
]

我希望查询此集合以获取文档";在";按位置顺序指定的日期。算法是:

  1. 找到日期为"0"的第一个元素;在";指定的日期
  2. 返回其位置小于找到的元素的位置的所有文档;位置">

我用两个独立的查询天真地实现了这个算法。然而,我怀疑只需对数据库进行一次调用就可以完成,但我不知道如何继续。也许有聚合管道?

有人能给我一个线索吗?

编辑:以下是我目前使用的查询(大致(:

limit_element = db.getCollection('collection').find({
"date": { "$gte":  ISODate("2021-05-20T08:00:00.000Z") }
}).sort({
"position": 1
}).limit(1)
position = limit_element['position']
elements = db.getCollection('collection').find({
"position": { "$lt": position }
}).sort({
"position": 1
})

您可以使用带有两个匹配子句的聚合管道。从本质上讲,这与您现在所做的事情相同,但在一个数据库访问中,速度更快。通过聚合,您可以访问上一阶段的结果,以便在下一阶段使用。如果这是值得的,你必须做出决定。我认为你天真的做法是明智的。在任何情况下,这都是一个有条件的问题,所以你必须先找到一个,然后再做另一个。区别就在于你在哪里做步骤。

最新更新