Mongodb - Find sales containing two products

0

I am a beginner at Mongodb and would like help with the following question. I have a collection that has the following structure:

{[{id_venda:1, id_produto:20},
  {id_venda:1, id_produto:3332},
  {id_venda:1, id_produto:9},
  {id_venda:2, id_produto:20},
  {id_venda:2, id_produto:9},
  {id_venda:2, id_produto:7}
  {id_venda:3, id_produto:2980},
  {id_venda:4, id_produto:217}]}

How can I find sales that contain products 9 and 20? In this case the result returned would be: 1 and 2

Code I've tried:

db.vendas.find({id_produto:{$elemMatch:{$eq:9,$eq:20}}})

But I know it's not right, because the above code applies the filter to the same object and I'd like to apply it over the sales_id

Thanks in advance for being able to help me

    
asked by anonymous 27.10.2018 / 15:03

1 answer

0

The solution I found was as follows:

db.collection.aggregate([

      //Primeiro filtro pelas vendas que contenha um dos produtos     
{$match:{$or:[{id_produto:9},{id_produto:20}]}},


      //Agrupo pelo id da venda contando a quantidade de vezes que aparece um 
     //registro (cada registro encontrado é referente a um dos produtos)     
{$group:{_id:"$id_venda",count:{$sum:1}}},

    //Então eu filtro onde foram encontrados os dois produtos
{$match:{"count":2}}
])
    
27.10.2018 / 17:32