Mongoose - Как найти по «массиву» ObjectId? - PullRequest
0 голосов
/ 09 ноября 2018

Я получаю массив ObjectId из запроса, затем мне нужно использовать их внутри другого запроса.

Вот функция:

exports.getAllByShop = wrap(async(req, res, next) => {
    const products = await Product.find({ _shop: mongoose.Types.ObjectId(req.params.shopId) }).select('_id');
    // how to make this query?
    const sales = await Sale.find({ _product: { $in: [ products ]}});
    res.status(200).json(sales);
});

Результат первого запроса products выглядит так:

[ 
  { _id: 5be3601f90e40b35547ae6b4 },
  { _id: 5be4b5a3443abf196cb4cc9a }
]

Чего я пытаюсь достичь:

const sales = await Sale.find({ _product: { 
$in: 
  [ 
    mongoose.Types.ObjectId(prod1),
    mongoose.Types.ObjectId(prod2),
    ... 
  ]
}});

Мне нужно найти все sales, у которых _product равно значениям указанного выше массива. Прямо сейчас это не работает и показывает это сообщение: "Cast to ObjectId failed for value "[ { _id: 5be3601f90e40b35547ae6b4 },↵ { _id: 5be4b5a3443abf196cb4cc9a } ]" at path "_product" for model "sale"". Как заставить работать этот последний запрос?

1 Ответ

0 голосов
/ 09 ноября 2018

вы вставляете массив в массив, попробуйте вместо этого

const productIds = products.map((v) => v)
const sales = await Sale.find({ _product: { $in: productIds }});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...