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

MongoDB $velikost

V MongoDB, $size operátor agregačního kanálu spočítá a vrátí celkový počet položek v poli.

$size operátor přijímá jeden argument. Argumentem může být jakýkoli platný výraz, který se překládá na pole.

Příklad

Předpokládejme, že máme kolekci nazvanou test s následujícími dokumenty:

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

Můžeme použít $size vrátit počet položek v polích v příslušných data pole.

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2, 3, 4, 5 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $size: [ "$data" ] }
          }
     }
   ]
)

Výsledek:

{ "data" : [ ], "result" : 0 }
{ "data" : [ "a" ], "result" : 1 }
{ "data" : [ "a", "b" ], "result" : 2 }
{ "data" : [ "a", "b", "c" ], "result" : 3 }
{ "data" : [ 1, 1, 1, 1 ], "result" : 4 }

Vnořená pole

$size operátor nesestupuje do vnořených polí a nepočítá jejich prvky. Vyhodnocuje pole od nejvyšší úrovně.

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

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

A použijeme $size k tomu:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 6 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $size: [ "$data" ] }
          }
     }
   ]
)

Výsledek:

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

Vnořené pole se počítá jako jeden prvek (bez ohledu na to, kolik prvků obsahuje).

Chybné datové typy

Argumentem může být jakýkoli platný výraz, pokud se překládá na pole. Pokud se nevyřeší na pole, dojde k chybě.

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

{ "_id" : 7, "data" : 3 }

data pole se nerozkládá na pole.

Zde je to, co se stane, když použijeme $size do tohoto pole:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 7 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $size: [ "$data" ] }
          }
     }
   ]
)

Výsledek:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "The argument to $size must be an array, but was of type: double",
	"code" : 17124,
	"codeName" : "Location17124"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

Chybová zpráva nám říká, že The argument to $size must be an array, but was of type: double .

Chybějící pole

Pokud pole v dokumentu neexistuje, vrátí se chyba.

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

{ "_id" : 8 }

A použijeme $size k tomuto dokumentu:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 8 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $size: [ "$data" ] }
          }
     }
   ]
)

Výsledek:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "The argument to $size must be an array, but was of type: missing",
	"code" : 17124,
	"codeName" : "Location17124"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

  1. Proč Mongoose přidává prázdná pole?

  2. Porozumění Meteor Publish / Subscribe

  3. Tipy pro upgrade serveru Percona pro MongoDB

  4. Monitorování instancí MongoDB pomocí MongoDB Monitoring Service (MMS)