В MongoDB, $literal
Операторът на конвейера за агрегиране връща стойност без синтактичен анализ.
Той приема всеки валиден израз и връща неанализирания израз.
$literal
операторът може да бъде полезен, когато имате стойност, която MongoDB би могъл неволно да интерпретира като израз, но вие не искате.
Например, ако имате парична сума, която включва знак за долар, MongoDB може по невнимание да интерпретира това като име на поле. Можете да използвате $literal
за да попречи на MongoDB да интерпретира такива изрази.
Пример
Да предположим, че имаме колекция, наречена test
със следния документ:
{ "_id" : 1, "name" : "Homer" }
Ето пример за прилагане на $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
_id: 0,
interpreted: "$name",
literal: { $literal: "$name" }
}
}
]
)
Резултат:
{ "interpreted" : "Homer", "literal" : "$name" }
В този пример връщаме стойността на name
поле с помощта на $name
да се позовава на него.
Връщаме също литералната стойност $name
, без MongoDB да го интерпретира като name
поле:
Пример 2
Да предположим, че нашата колекция съдържа следния документ:
{ "_id" : 2, "a" : 10, "b" : 5 }
Ето още един пример за използване на $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 2 ] } } },
{
$project:
{
_id: 0,
interpreted: { $multiply: [ "$a", "$b" ] },
literal: { $literal: { $multiply: [ "$a", "$b" ] } }
}
}
]
)
Резултат:
{ "interpreted" : 50, "literal" : { "$multiply" : [ "$a", "$b" ] } }
В този случай първото върнато поле съдържа резултата от $multiply
оператор срещу a
и b
полета.
Второто поле просто извежда стойността на литерала, която предоставихме на $literal
оператор.