Da MongoDB 4.0, puoi usare $toLong
operatore della pipeline di aggregazione per convertire un valore in un long.
La maggior parte dei tipi può essere convertita in long, ma ObjectId no.
Quando converti un valore Date in un valore lungo, $toLong
restituisce il numero di millisecondi dall'epoca che corrisponde al valore della data.
Quando converti un booleano in un long, se il booleano è true
, quindi il lungo è 1
. Se il booleano è false
, quindi il lungo è 0
.
Esempio
Supponiamo di avere una collezione chiamata types
e contiene i seguenti documenti:
{ "_id" : ObjectId("601340eac8eb4369cf6ad9db"), "double" : 123.75, "string" : "123", "boolean" : true, "date" : ISODate("2020-12-31T23:30:15.123Z"), "integer" : 123, "long" : NumberLong(123), "decimal" : NumberDecimal("123.75") }
Possiamo usare il $toLong
operatore per convertire quei campi (ad eccezione di _id
campo) a lungo. Se l'input è già un long, restituisce semplicemente il long.
db.types.aggregate(
[
{
$project:
{
_id: 0,
double: { $toLong: "$double" },
string: { $toLong: "$string" },
boolean: { $toLong: "$boolean" },
date: { $toLong: "$date" },
integer: { $toLong: "$integer" },
long: { $toLong: "$long" },
decimal: { $toLong: "$decimal" }
}
}
]
).pretty()
Risultato:
{ "double" : NumberLong(123), "string" : NumberLong(123), "boolean" : NumberLong(1), "date" : NumberLong("1609457415123"), "integer" : NumberLong(123), "long" : NumberLong(123), "decimal" : NumberLong(123) }
Errori
Se riscontri errori, prova a utilizzare il $convert
operatore invece di $toLong
. Il $convert
operatore consente di gestire gli errori senza influire sull'intera operazione di aggregazione.
Il $toLong
operatore è l'equivalente dell'utilizzo di $convert
per convertire un valore in un long.
Ecco un esempio di utilizzo di $convert
per provare a convertire un ObjectId in un long (che si traduce in un errore):
db.types.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$_id",
to: "long",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Risultato:
{ "result" : "An error occurred" }
Usando $convert
ci ha consentito di specificare il messaggio di errore da utilizzare quando si è verificato l'errore e non ha interrotto l'intera operazione di aggregazione.
Vedi MongoDB $convert
per altri esempi.