Mongo查询按维护顺序排列

时间:2019-04-11 17:36:10

标签: mongodb aggregation-framework

是否可以在数组上进行mongo查询并在查询中给出顺序? 我正在寻找的东西例如: 集合对象-我们称之为Route

[{
  name: 'Route 1',
  start: ISODate('date'),
  stops: ['stop1Id', 'stop2Id', 'stop3Id', 'stop4Id']
},
{
  name: 'Route 2',
  start: ISODate('date'),
  stops: ['stop4Id', 'stop3Id', 'stop2Id', 'stop1Id']
}];

现在,我想进行查询,在其中可以指定要从stop4Idstop2Id的位置。我可以在一个查询中做类似的事情吗?

Route.find({
  // where stop4Id.index < stop2Id.index
});

编辑: 因此,结果(来自示例)将仅返回第二条路线。因为第一个停靠的顺序相反。

1 个答案:

答案 0 :(得分:1)

您可以将$indexOfArray连同$expr 一起使用

db.collection.find({
  "$expr": {
    "$gt": [
      { "$indexOfArray": ["$stops", "stop2Id"] },       
      { "$indexOfArray": ["$stops", "stop4Id"] } 
    ]
  }
})

Output

[
  {
    "_id": ObjectId("5a934e000102030405000001"),
    "name": "Route 2",
    "stops": [
      "stop4Id",
      "stop3Id",
      "stop2Id",
      "stop1Id"
    ]
  }
]