sql >> Databáze >  >> NoSQL >> MongoDB

Prázdné pole zabraňuje zobrazení dokumentu v dotazu

Můžete použít $cond operátor v $project fázi nahradit prázdný attr pole s jedním, který obsahuje zástupný symbol jako null který lze použít jako značku k označení, že tento dokument neobsahuje žádné attr prvky.

Takže byste vložili další $project fázi takto těsně před $unwind :

    {
        $project: {
            attrs: {$cond: {
               if: {$eq: ['$attrs', [] ]},
               then: [null],
               else: '$attrs'
           }}
        }
    },

Jedinou výhradou je, že skončíte s null hodnotu ve finálním attrs pole pro ty skupiny, které obsahují alespoň jeden dokument bez jakýchkoli attrs prvky, takže tyto prvky na straně klienta musíte ignorovat.

Příklad

Příklad používá změněný $match fázi, protože ta ve vašem příkladu není platná.

Zadávání dokumentů

[
  {_id: {type: 1, id: 2}, attrs: []},
  {_id: {type: 2, id: 1}, attrs: []},
  {_id: {type: 2, id: 2}, attrs: [{name: 'john', type: 22}, {name: 'bob', type: 44}]}
]

Výstup

{
    "result" : [ 
        {
            "_id" : 1,
            "attrs" : [ 
                null
            ]
        }, 
        {
            "_id" : 2,
            "attrs" : [ 
                {
                    "name" : "bob",
                    "type" : 44
                }, 
                {
                    "name" : "john",
                    "type" : 22
                }, 
                null
            ]
        }
    ],
    "ok" : 1
}

Příkaz Aggregate

db.test.aggregate([
    {
        $match: {
            '_id.servicePath': {
                $in: [
                    null
                ]
            }
        }
    },
    {
        $project: {
            _id: 1,
            "attrs.name": 1,
            "attrs.type": 1
        }
    },
    {
        $project: {
            attrs: {$cond: {
               if: {$eq: ['$attrs', [] ]},
               then: [null],
               else: '$attrs'
           }}
        }
    },
    {
        $unwind: "$attrs"
    },
    {
        $group: {
            _id: "$_id.type",
            attrs: {
                $addToSet: "$attrs"
            }
        }
    },
    {
        $sort: {
            _id: 1
        }
    }
])


  1. Vysušení obecné RedisTemplate na jaře 4

  2. Fulltextové vyhledávání na MongoDB GridFS?

  3. Jak aktualizovat hodnotu konkrétního vloženého dokumentu v poli konkrétního dokumentu v MongoDB?

  4. MongoDB Agregation:Dvojité vyhledávání a odpověď vyhledávání sloučení na příslušný objekt