$literal (agregação)
Nesta página
Definição
$literal
Retorna um valor sem analisar. Use para valores que o aggregation pipeline pode interpretar como uma expressão.
A expressão
$literal
tem a seguinte sintaxe:{ $literal: <value> }
Comportamento
Se <value>
for umaexpressão , $literal
não avalia a expressão , mas gera a expressão não analisada .
Exemplo | Resultado |
---|---|
{ $literal: { $add: [ 2, 3 ] } } | { "$add" : [ 2, 3 ] } |
{ $literal: { $literal: 1 } } | { "$literal" : 1 } |
Exemplos
Trate $
como um Literal
Na expressão, o cifrão $
é avaliado como um caminho de campo; ou seja, fornece acesso ao campo. Por exemplo, a expressão $eq
$eq: [
"$price", "$1" ]
executa uma verificação de igualdade entre o valor no campo denominado price
e o valor no campo denominado 1
no documento.
O exemplo a seguir usa uma expressão $literal
para tratar uma string que contém um cifrão "$1"
como um valor constante.
Uma coleção storeInventory
tem os seguintes documentos:
db.storeInventory.insertMany( [ { "_id" : 1, "item" : "napkins", price: "$2.50" }, { "_id" : 2, "item" : "coffee", price: "1" }, { "_id" : 3, "item" : "soap", price: "$1" } ] )
db.storeInventory.aggregate( [ { $project: { costsOneDollar: { $eq: [ "$price", { $literal: "$1" } ] } } } ] )
Esta operação projeta um campo denominado costsOneDollar
que detém um valor booleano, indicando se o valor do campo price
é igual à string "$1"
:
{ "_id" : 1, "costsOneDollar" : false } { "_id" : 2, "costsOneDollar" : false } { "_id" : 3, "costsOneDollar" : true }
Projetar um novo campo com valor 1
O estágio $project
utiliza a expressão <field>: 1
para incluir o <field>
na saída. O exemplo a seguir usa o $literal
para retornar um novo campo definido para o valor de 1
.
Uma coleção books
tem os seguintes documentos:
db.books.insertMany([ { "_id" : 1, "title" : "Dracula", "condition": "new" }, { "_id" : 2, "title" : "The Little Prince", "condition": "new" } ])
A expressão { $literal: 1 }
retorna um novo campo editionNumber
configurado para o valor 1
:
db.books.aggregate( [ { $project: { "title": 1, "editionNumber": { $literal: 1 } } } ] )
A operação resulta nos seguintes documentos:
{ "_id" : 1, "title" : "Dracula", "editionNumber" : 1 } { "_id" : 2, "title" : "The Little Prince", "editionNumber" : 1 }