mongoDB "аргументы $ lookup должны быть строками, пусть: .... имеет тип 3", - PullRequest
0 голосов
/ 13 июля 2020

Как выполнить поиск $ в поле, которое представляет собой массив идентификаторов (длинных), а не только один идентификатор? Попытка получить информацию о продукте из коллекции '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"
}
...