Что вам нужно сделать, это найти продукт, который удовлетворяет 2 условиям одновременно:
- Имеет конкретный идентификатор
- Имеет определенную строку в массиве
requests
, поданную
Что делает ваш запрос, так это индивидуально тестирует 2 условия. Сначала вы находите продукт, а затем проверяете, существует ли какой-либо продукт, который удовлетворяет условию 2.
Чтобы применить оба условия к одному и тому же продукту, используйте один запрос:
Product.find({ _id: productId, 'requests.userId': userId })
.then(product => {
if (product) {
const [result] = product; // take the first matched item
// ... do stuff with result
}
})
В качестве альтернативы вы можете сделать все это в памяти:
Product.findById(productId).then(product => {
if (!product) {
console.log("no product found");
// ... potentially send an error here
return;
}
// find a match in memory
const [result] = product.requests.filter(uid => uid === userId);
if (result) {
// ...
}
});