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

MongoDB $concatArrays

V MongoDB, $concatArrays Operátor agregačního kanálu zřetězí dvě nebo více polí a vrátí zřetězené pole.

Příklad

Předpokládejme, že máme kolekci nazvanou data s následujícím dokumentem:

{ "_id" : 1, "a" : [ 1, 2, 3 ], "b" : [ 4, 5, 6 ] }

Můžeme použít $concatArrays operátor pro zřetězení pole a pole s polem b pole:

db.data.aggregate([
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])

Výsledek:

{ "result" : [ 1, 2, 3, 4, 5, 6 ] }

Prázdná pole

Zřetězení pole s prázdným polem nic nemění.

Předpokládejme, že naše sbírka obsahuje také následující dokument:

{ "_id" : 2, "a" : [ 1, 2, 3 ], "b" : [ ] }

Použijme $concatArrays k tomu::

db.data.aggregate([
    { $match: { _id: 2 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])

Výsledek:

{ "result" : [ 1, 2, 3 ] }

Skončíme s prvním polem bez jakýchkoli změn.

Chybějící pole

Pokus o zřetězení pole s polem, které neexistuje, vrátí null .

Představte si, že naše sbírka obsahuje také následující dokument:

{ "_id" : 3, "a" : [ 1, 2, 3 ] }

Zde je to, co se stane, když použijeme $concatArrays do a pole a neexistující pole:

db.data.aggregate([
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])

Výsledek:

{ "result" : null }

Další typy dat

Každý výraz poskytnutý $concatArrays může být jakýkoli platný výraz, pokud se rozlišuje na pole.

Pokud se nevyřeší na pole, vrátí se chyba.

Předpokládejme, že máme následující dokument:

{ "_id" : 4, "a" : [ 1, 2, 3 ], "b" : 4 }

Zde je to, co se stane, když se pokusíme zřetězit a a b pole:

db.data.aggregate([
    { $match: { _id: 4 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])

Výsledek:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$concatArrays only supports arrays, not double",
	"code" : 28664,
	"codeName" : "Location28664"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

V tomto příkladu jsem se pokusil zřetězit pole s dvojitým, ale dostal jsem chybu, která říká, že $concatArrays podporuje pouze pole, nikoli double .


  1. Nelze se ověřit na mongodb pomocí PHP

  2. $unwind objekt v agregačním rámci

  3. Hledejte ve více kolekcích v MongoDB

  4. 2 přístupy pro sledování online uživatelů pomocí Redis. Který je rychlejší?