Монго запрос в массиве с сохранением порядка - PullRequest
1 голос
/ 11 апреля 2019

Можно ли сделать запрос монго на массив и навести порядок в запросе? Я ищу что-то вроде, например: Объект коллекции - назовем его Route:

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

Теперь я хотел бы сделать запрос, в котором я могу указать, что я хочу перейти от stop4Id до stop2Id. Могу ли я сделать что-то подобное в одном запросе?

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

EDIT: Таким образом, в результате (из примера) он вернет только второй маршрут. Поскольку первый имеет остановки в обратном порядке.

1 Ответ

1 голос
/ 11 апреля 2019

Вы можете использовать оператор $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"
    ]
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...