使用$ lt时,仅选择匹配结果集中的最近记录

时间:2019-01-07 10:13:58

标签: mongodb

我有一个集合,其中存在多个location_id和created_date的item_id。

我想在created_date $ lte 2018-11-21的特定位置获取所有项目。 我希望$ lte只匹配一个记录,并且不再匹配,但是问题是,使用$ lte时,它不会停止到仅第一个匹配的行,而是会获取所有具有较低创建日期的行。

{
  "created_date" : {
    $lte : ISODate('2018-11-21'),
  },
  "location_id" : {
    $in : [
      "5a7c2cc414d4882bb9378373",
      "5a7c0c6714d488216a60b033"
      ]
  }
}

样本数据

{
  "item_id" : ObjectId("5a81677f14d4880dc4017c74"),
  "created_date" : ISODate("2018-11-10T11:00:00Z"),
  "location_id" : "5a7c0c6714d488216a60b033"
},
{
  "item_id" : ObjectId("5a81677f14d4880dc4017c74"),
  "created_date" : ISODate("2018-11-09T10:00:00Z"),
  "location_id" : "5a7c0c6714d488216a60b033"
},
{
  "item_id" : ObjectId("5a81677f14d4880dc4017c74"),
  "created_date" : ISODate("2018-11-10T11:00:00Z"),
  "location_id" : "5a7c0c6714d488216a60b011"
},
{
  "item_id" : ObjectId("5a81677f14d4880dc4017c74")
  "created_date" : ISODate("2018-11-09T11:00:00Z"),
  "location_id" : "5a7c0c6714d488216a60b011",
}

我只想要$ lte中的第一场比赛

{
 "item_id" : ObjectId("5a81677f14d4880dc4017c74"),
 "created_date" : ISODate("2018-11-10T11:00:00Z"),
 "location_id" : "5a7c0c6714d488216a60b033"
},
{
  "item_id" : ObjectId("5a81677f14d4880dc4017c74"),
  "created_date" : ISODate("2018-11-10T11:00:00Z"),
  "location_id" : "5a7c0c6714d488216a60b011"
}

我想避免使用该组,因为有超过300万条记录,并且组ll会减慢查询速度,是否还有其他方法可以在找到匹配记录时停止进一步匹配$ lte?

任何建议将不胜感激。

0 个答案:

没有答案