MongoDB: conta il numero di elementi in un array

Ho una collezione in cui ogni documento della collezione ha un array chiamato foo che contiene un insieme di documenti incorporati. C’è attualmente un modo banale nella shell di MongoDB per contare quante istanze ci sono dentro? qualcosa di simile a:

db.mycollection.foos.count() o db.mycollection.foos.size() ?

Ogni documento dell’array deve avere un unico foo_id e voglio fare un conteggio rapido per essere sicuro che la giusta quantità di elementi sia all’interno di un array per un documento casuale nella collezione.

In MongoDB 2.6, Aggregation Framework dispone di un nuovo operatore array $size che è ansible utilizzare:

 > db.mycollection.insert({'foo':[1,2,3,4]}) > db.mycollection.insert({'foo':[5,6,7]}) > db.mycollection.aggregate({$project: { count: { $size:"$foo" }}}) { "_id" : ObjectId("5314b5c360477752b449eedf"), "count" : 4 } { "_id" : ObjectId("5314b5c860477752b449eee0"), "count" : 3 } 

se sei su una versione recente di mongo (2.2 e successive) puoi usare il framework di aggregazione.

 db.mycollection.aggregate([ {$unwind: '$foo'}, {$group: {_id: '$_id', 'sum': { $sum: 1}}}, {$group: {_id: null, total_sum: {'$sum': '$sum'}}} ]) 

che ti darà il totale della tua collezione.

L’omissione dell’ultimo group aggregherà i risultati per record.

Puoi provare a contare gli oggetti in foos.

  db.collection.aggregate([{$project: {numberOfFoos: { $size: "$foos" } } } ] )