Как выполнить поиск $ в поле, которое представляет собой массив идентификаторов (длинных), а не только один идентификатор? Попытка получить информацию о продукте из коллекции 'products' по _id, поместить ее в массив, а затем встроить список информации о продукте в складской документ.
К сожалению, наша база данных mon go работает на версии 3.2, поэтому новая функция позволяет поиск с помощью массива (https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#use -lookup-with-an-array ) не применяется.
Просмотрел кучу решений в Интернете, это кажется наиболее близким, { ссылка }, изменено на следующее:
db.getCollection('warehouses').aggregate([
{"$match":
// conditions to be matched
},
{ $lookup:
{
from: 'products',
let: {'productIds' : '$productIds' },
pipeline: [
{ $match: { $expr: {$in: ["$_id", "$$productIds"] } } },
],
as: 'productLists'
}
}
])
Однако появляется следующая ошибка:
"arguments to $lookup must be strings, let: .... is type 3".
_id - это число (длинное), а не строка, есть ли какой обходной путь для этого? Спасибо.
Образец складского документа:
{
"_id" : NumberLong(1),
productIds: [NumberLong(1), NumberLong(2), NumberLong(3)],
"warehouseProperty1" : "warehouseProperty1",
"warehouseProperty2" : "warehouseProperty2",
"warehouseProperty3" : "warehouseProperty3",
"warehouseProperty4" : "warehouseProperty4"
}
Образец документа о продукте:
{
"_id" : NumberLong(1),
"productProperty1" : "productProperty1",
"productProperty2" : "productProperty2",
"productProperty3" : "productProperty3",
"productProperty4" : "productProperty4"
}
Желаемый результат:
{
"_id" : NumberLong(1),
productIds: [
{
"_id" : NumberLong(1),
"productProperty1" : "productProperty1",
"productProperty2" : "productProperty2",
"productProperty3" : "productProperty3",
"productProperty4" : "productProperty4"
},
{
"_id" : NumberLong(2),
"productProperty1" : "productProperty1",
"productProperty2" : "productProperty2",
"productProperty3" : "productProperty3",
"productProperty4" : "productProperty4"
},
{
"_id" : NumberLong(3),
"productProperty1" : "productProperty1",
"productProperty2" : "productProperty2",
"productProperty3" : "productProperty3",
"productProperty4" : "productProperty4"
},
],
"warehouseProperty1" : "warehouseProperty1",
"warehouseProperty2" : "warehouseProperty2",
"warehouseProperty3" : "warehouseProperty3",
"warehouseProperty4" : "warehouseProperty4"
}