MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Array kosong mencegah dokumen muncul dalam kueri

Anda dapat menggunakan $cond operator dalam $project panggung untuk mengganti attr yang kosong array dengan yang berisi placeholder seperti null yang dapat digunakan sebagai penanda untuk menunjukkan bahwa dokumen ini tidak mengandung attr elemen.

Jadi, Anda akan memasukkan $project tambahan panggung seperti ini tepat sebelum $unwind :

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

Satu-satunya peringatan adalah bahwa Anda akan berakhir dengan null nilai dalam attrs terakhir array untuk grup yang berisi setidaknya satu dokumen tanpa attrs elemen, jadi Anda harus mengabaikan sisi klien tersebut.

Contoh

Contoh menggunakan $match . yang diubah panggung karena yang ada di contoh Anda tidak valid.

Masukkan Dokumen

[
  {_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}]}
]

Keluaran

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

Perintah Agregat

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pembacaan DBname.system.indexes gagal pada cluster Atlas oleh mongobee setelah terhubung

  2. Menyimpan properti array pada skema Mongoose

  3. Pencocokan pipa MongoDB $lookup dengan _id tidak berfungsi

  4. Cara cepat mengambil semua dokumen MongoDB pymongo

  5. Jelaskan kerangka kerja Agregat