Запрос Mongoees для поиска объекта с массивом идентификаторов независимо от порядка их идентификаторов - Nodejs - PullRequest
0 голосов
/ 18 июня 2020
await Product.findOne({ features: ['5e209ea374df9a1a3fd4d3e0', '5ec566ba1b81f05db31ae91d']})

=> Null (он должен возвращать объект)

await Product.find({ features: ['5ec566ba1b81f05db31ae91d', '5e209ea374df9a1a3fd4d3e0']})

=> Найденный объект

Мне нужен запрос, чтобы независимо от порядка идентификаторов в массиве я получил объект и это не совпадающие результаты Я хочу, чтобы это было указано c результаты, поэтому найденный объект должен иметь только 2 ключа Любая помощь?

await Product.find({ features: ['5ec566ba1b81f05db31ae91d', '5e209ea374df9a1a3fd4d3e0', 'a1a3fd5e209ea374df94d3e0']})

=> он не должен повторять любой результат, этот запрос имеет два совпадающих идентификатора

Это результат

{
  features: [ 5ec566ba1b81f05db31ae91d, 5e209ea374df9a1a3fd4d3e0 ],
  _id: 5ec5663756ca7576421628d8,
  __v: 1,
  created_at: 2020-05-20T17:17:43.342Z,
  updated_at: 2020-05-27T15:33:07.672Z,
}

1 Ответ

1 голос
/ 18 июня 2020

Вы можете использовать $in.

await Product.find({ features: { $in: ['5e209ea374df9a1a3fd4d3e0', '5ec566ba1b81f05db31ae91d'] } })

Это найдет продукт, который имеет любой из предоставленных идентификаторов функций.

Если вы хотите сопоставить продукт, который имеет все поставленные , то вы можете использовать $all вместо $in.

await Product.find({ features: { $all: ['5e209ea374df9a1a3fd4d3e0', '5ec566ba1b81f05db31ae91d'] } })

** Как указано ниже, $all не будет работать, запрос предназначен для 2 идентификаторов, а их больше двух функции. **

Другой подход - использовать $and.

await Product.find({ $and: [
   { features: '5e209ea374df9a1a3fd4d3e0'} , 
   { features: '5ec566ba1b81f05db31ae91d'} 
 ]
})

Поскольку вы хотите ограничить размер до двух, в окончательном запросе будет показано,

await Product.find({ $and: [
   { features: '5e209ea374df9a1a3fd4d3e0'} , 
   { features: '5ec566ba1b81f05db31ae91d'} 
   { features: { $size: 2 } } 
 ]
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...