$toLong (agregação)
Nesta página
Definição
$toLong
Converte um valor em um longo. Se o valor não puder ser convertido em longo,
$toLong
apresentará erro. Se o valor for nulo ou estiver ausente,$toLong
retornará nulo.$toLong
tem a seguinte sintaxe:{ $toLong: <expression> } O
$toLong
usa qualquer expressãoválida.O
$toLong
é uma abreviatura para a seguinte expressão$convert
:{ $convert: { input: <expression>, to: "long" } }
Comportamento
A tabela a seguir lista os tipos de entrada que podem ser convertidos para um longo:
Tipo de entrada | Comportamento |
---|---|
Boolean | Returns Long(0) for false .Returns Long(1) for true . |
Double | Retorna valor truncado. O valor double truncado deve cair dentro do valor mínimo e máximo por um longo período. Você não pode converter um valor double cujo valor truncado é menor que o valor mínimo longo ou é maior que o valor máximo longo. |
Decimal | Retorna valor truncado. O valor decimal truncado deve cair dentro do valor mínimo e máximo por um longo período. Não é possível converter um valor decimal cujo valor truncado seja menor que o valor longo mínimo ou maior que o valor longo máximo. |
Inteiro | Retorna o valor int como um longo. |
Long | Sem operação. Retorna o valor longo. |
String | Retorna o valor numérico da string. O valor da string deve ser longo de base 10 (por exemplo, Você não pode converter um valor de string de um número flutuante, decimal ou 10 que não seja de base (por exemplo, |
Data | Converte a data para o número de milissegundos desde a época. |
A tabela a seguir lista alguns exemplos de conversão:
Exemplo | Resultados |
---|---|
{ $toLong: true } | Long("1") |
{ $toLong: false } | Long("0") |
{ $toLong: 1.99999 } | Long("1") |
{ $toLong: NumberDecimal("5.5000") } | Long("5") |
{ $toLong: NumberDecimal("9223372036854775808.0") } | Erro |
{ $toLong: NumberInt(8) } | Long(8) |
{ $toLong: ISODate("2018-03-26T04:38:28.044Z") } | Long("1522039108044") |
{ $toLong: "-2" } | Long("-2") |
{ $toLong: "2.5" } | Erro |
{ $toLong: null } | zero |
Exemplo
Crie uma collection orders
com os seguintes documentos:
db.orders.insertMany( [ { _id: 1, item: "apple", qty: NumberInt(5) }, { _id: 2, item: "pie", qty: "100" }, { _id: 3, item: "ice cream", qty: NumberLong("500") }, { _id: 4, item: "almonds", qty: "50" }, ] )
A seguinte operação de aggregation na collection orders
converte qty
em longo antes de classificar pelo valor:
// Define stage to add convertedQty field with converted qty value qtyConversionStage = { $addFields: { convertedQty: { $toLong: "$qty" } } }; // Define stage to sort documents by the converted qty values sortStage = { $sort: { "convertedQty": -1 } }; db.orders.aggregate( [ qtyConversionStage, sortStage ])
A operação retorna os seguintes documentos:
{ _id: 3, item: 'ice cream', qty: Long("500"), convertedQty: Long("500") }, { _id: 2, item: 'pie', qty: '100', convertedQty: Long("100") }, { _id: 4, item: 'almonds', qty: '50', convertedQty: Long("50") }, { _id: 1, item: 'apple', qty: 5, convertedQty: Long("5") }
Observação
Se a operação de conversão encontrar um erro, a operação de aggregation interromperá e exibirá um erro. Para substituir esse comportamento, use $convert
em vez disso.