Se devi restituire le dimensioni di un documento in MongoDB, puoi utilizzare quanto segue:
- Il
$bsonSize
operatore della pipeline di aggregazione - Il
Object.bsonSize()
metodo
Di seguito sono riportati esempi di ciascun approccio.
Dati di esempio
Per i seguenti esempi, utilizzeremo una raccolta chiamata products
con i seguenti documenti:
{ "_id" : 1, "product" : { "name" : "Shirt - Short Sleeves", "color" : "White" } } { "_id" : 2, "product" : { "name" : "Cap", "color" : "Green" } } { "_id" : 3, "product" : { "name" : "Travel Pack", "color" : "Light Blue" } }
Si noti che ogni campo prodotto contiene un documento incorporato.
Possiamo restituire la dimensione dell'intero documento o solo dell'oggetto incorporato.
Il $bsonSize
Operatore di condotte di aggregazione
Possiamo usare il $bsonSize
operatore con il $$ROOT
variabile di sistema per ottenere la dimensione dell'intero documento. Il $$ROOT
variabile si riferisce al documento attualmente in fase di elaborazione dalla pipeline.
Esempio:
db.products.aggregate([
{
$project: {
"rootSize": { $sum: { $bsonSize: "$$ROOT" } }
}
}
])
Risultato:
{ "_id" : 1, "rootSize" : 81 } { "_id" : 2, "rootSize" : 63 } { "_id" : 3, "rootSize" : 76 }
In questo caso otteniamo la dimensione di tutti i documenti nella raccolta, ma puoi sempre filtrarla su uno o più documenti.
Per ottenere le dimensioni dei documenti incorporati, possiamo sostituire $$ROOT
variabile con il nome del campo dei documenti.
Esempio:
db.products.aggregate([
{
$project: {
"documentSize": { $sum: { $bsonSize: "$product" } }
}
}
])
Risultato:
{ "_id" : 1, "documentSize" : 54 } { "_id" : 2, "documentSize" : 36 } { "_id" : 3, "documentSize" : 49 }
In questo caso, il nome del campo è product
e quindi usiamo $product
per fare riferimento a quel campo.
Vedi MongoDB $bsonSize
per ulteriori informazioni ed esempi.
Il Object.bsonSize()
Metodo
Il Object.bsonSize()
è un altro modo per ottenere le dimensioni di un documento.
Esempio:
Object.bsonsize(
db.products.findOne()
)
Risultato:
81
Questo metodo restituisce solo la dimensione e non di più.
Nota che ho usato findOne()
metodo invece di find()
metodo. L'ho fatto perché find()
restituisce solo un cursore, mentre findOne()
restituisce il documento vero e proprio.
Possiamo ottenere la dimensione del documento incorporato aggiungendolo usando la notazione del punto:
Object.bsonsize(
db.products.findOne().product
)
Risultato:
54
Possiamo ottenere la dimensione del documento successivo specificando il suo _id
come argomento della query:
Object.bsonsize(
db.products.findOne({_id:2}).product
)
Risultato:
36
Vedi MongoDB Object.bsonSize()
per ulteriori informazioni ed esempi.