Проблема запроса $ match при использовании агрегации с mongodb - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь сделать очень простой запрос, объединяющий две коллекции с помощью агрегации.

У меня есть две коллекции,

productSchema = new Schema({
    product: { type: String },
    price: { type: Number},
})

const inventoriesSchema= new Schema({
    date: { type: Date},
    products: [productSchema],
})

Теперь я хочу собрать все продукты и внутри каждого продукт, который я хочу привнести в инвентарь.

Это то, что я делаю.

    productModel.aggregate([
        {
            $lookup: {
                from: 'inventories',
                let: {
                    'product': { $toString: '$_id' }
                },
                pipeline: [
                    {
                        $match: {
                            'products._id': '$$product'
                        }
                    },
                ],
                as: 'inventory',
            }
        },
      ])

Я пробовал много способов ... с $ toObjectId $ toString ... используя $ expr тоже вот так ...

                     {
                        $match: {                              
                            $expr: {
                                $and: [
                                    { $eq: ['$product._id', { $toString: "$$product" }] }
                                ]

                            }
                        }
                    }

Что я делаю не так ... ???

1 Ответ

1 голос
/ 30 апреля 2020

Попробуйте запрос агрегации ниже, который использует $ in , чтобы проверить, существует ли выражение в массиве:

Предполагается, что ваше поле product в products Coll is ключ для присоединения и должен быть проверен в products массиве запасов Coll.

productModel.aggregate([
    {
        $lookup: {
            from: 'inventories',
            let: { 'product': '$product' }, // create local variable for products
            pipeline: [
                { $match: { $expr: { $in: [ "$$product",  "$products" ] } } } // check product from products Coll exists in products of inventories Coll
            ],
            as: 'inventory'
        }
    }
  ])
...