Поиск документов по индексу в массиве MONGODB (Mongoose) - PullRequest
0 голосов
/ 28 сентября 2019

Мне нужна ваша помощь. "Как мне искать документы в коллекции по массиву ObjectIDs по их индексу?

У меня есть массив, содержащий идентификаторы плейлистов. Они добавляются в строгом порядкеМне нужно найти их в том же порядке по индексу, как они есть. Я попытался использовать оператор $in, и он находит все правильно, но не в том порядке, в котором они хранятся в массиве. Можно лисделать, чтобы этот заказ был соблюден?

const playlisIds = [
      "5d8b4540a4f4ee24a40c8359",
      "5d8b47b1a4f4ee24a40c835e",
      "5d8e1457a513c112c0d8b42f",
      "5d8e1441a513c112c0d8b42a"
];

const playlists = await Playlist.find({ _id: {$in: playlisIds  } })

 playlists = [
   {
    _id: "5d8e1441a513c112c0d8b42a", //index 3 in playlisIds
     // ...other fields``
   },
   {
     _id: "5d8b47b1a4f4ee24a40c835e" //index 1 in playlisIds
     // ...other fields
   },
   {
    _id: "5d8b4540a4f4ee24a40c8359" //index 0 in playlisIds
    // ...other fields``
   },
   {
    _id: "5d8e1457a513c112c0d8b42f" //index 2 in playlisIds
   // ...other fields
   }
]

Поиск по одному документу за один раз будет очень дорогим.

const playlists = playlisIds.map(async (id) => await Playlist.findById(id)) // not good practice ((

const playlisIds = [
      "5d8b4540a4f4ee24a40c8359",
      "5d8b47b1a4f4ee24a40c835e",
      "5d8e1457a513c112c0d8b42f",
      "5d8e1441a513c112c0d8b42a"
];

const playlists = await Playlist.find({ _id: {$in: playlisIds  } })

playlists = [
   {
     _id: "5d8b4540a4f4ee24a40c8359", //index 0 in playlisIds
     // ...other fields
   },
   {
     _id: "5d8b47b1a4f4ee24a40c835e"//index 1 in playlisIds
     // ...other fields
   },
   {
    _id: "5d8e1457a513c112c0d8b42f"//index 2 in playlisIds
    // ...other fields
   },
   {
    _id: "5d8e1441a513c112c0d8b42a"//index 3 in playlisIds
    // ...other fields
   },

]

Я надеюсь, что он будет похож на выше.

...