Se devi restituire le dimensioni di un documento in MongoDB, puoi utilizzare quanto segue:
- Il
$bsonSizeoperatore 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.