sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo puedo retener los valores de longitud cero durante la fase $unwind de la canalización agregada en Mongo?

Modifica tu project etapa en la canalización de la siguiente manera:

La projection etapa hace las siguientes dos cosas:

  • Si la matriz de elementos es null o does not exist , calcula el valor del campo de elementos como [] (una matriz vacía).
  • A continuación, comprueba si el size de los items recién calculados el campo es 0 , si es 0 , luego cambia su valor a una matriz con el objeto predeterminado.

Código de etapa:

db.MyCollection.aggregate([
...
{$project:{"_id":"$$ROOT",
           "items":{$cond:[
                          {$eq:[{$size:{$ifNull:["$items",[]]}},0]},
                          [{"quantity":0,"price":0}],
                          "$items"
                          ]}}},
{$unwind:"$items"},
...
])