Можно ли иметь несколько сгруппированных операторов "$ или" при агрегации MongoDB? - PullRequest
3 голосов
/ 25 сентября 2019

Предположим, у меня есть это query на MySql:

SELECT *
  FROM myTable
 WHERE field1 = 'Marcelo'
   AND (emit_name = 'Test' OR dest_name = 'Test' OR transp_name = 'Test') -- First "grouped" OR
   AND done = 1
   AND (emit_code = 10 OR dest_code = 10 OR transp_code = 10);-- Second "grouped" OR

и мой агрегат MongoDB:

$params['$match']['$or'] = array(
                            ['emit_name' => 'Test'],
                            ['dest_name' => 'Test'],
                            ['transp_name' => 'Test'],
                            ['emit_code' => 10], 
                            ['dest_code' => 10],
                            ['transp_code' => 10]
                        );

Я хотел бы сделать два отдельных $or один с emit_name, dest_name и transp_name, а другой с emit_code, dest_code, transp_code как MySql query выглядит, а не только один $ или со всемишесть полей.Можно ли это сделать с MongoDB aggregation?

Ответы [ 2 ]

2 голосов
/ 25 сентября 2019
db.inventory.find( {
    $and : [
        { $or : [ { price : 0.99 }, { price : 1.99 } ] },
        { $or : [ { sale : true }, { qty : { $lt : 20 } } ] }
    ]
} )

Эта ссылка может иметь лучшее объяснение, и вы можете проверить документы

1 голос
/ 25 сентября 2019

Чтобы объединить логические условия с помощью оператора $ cond , затем оберните условия с помощью оператора $ или .

В этой записи @NeilLunn вы найдете пример, который вы можете помочь написать интересующий вас запрос.

...