Di MongoDB, $literal
operator pipeline agregasi mengembalikan nilai tanpa penguraian.
Ia menerima ekspresi valid apa pun, dan mengembalikan ekspresi yang belum diurai.
$literal
operator dapat berguna ketika Anda memiliki nilai yang secara tidak sengaja dapat ditafsirkan oleh MongoDB sebagai ekspresi, tetapi Anda tidak menginginkannya.
Misalnya, jika Anda memiliki jumlah uang yang menyertakan tanda dolar, MongoDB mungkin secara tidak sengaja menafsirkannya sebagai nama bidang. Anda dapat menggunakan $literal
untuk mencegah MongoDB menafsirkan ekspresi seperti itu.
Contoh
Misalkan kita memiliki koleksi yang disebut test
dengan dokumen berikut:
{ "_id" : 1, "name" : "Homer" }
Berikut ini contoh penerapan $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1 ] } } },
{
$project:
{
_id: 0,
interpreted: "$name",
literal: { $literal: "$name" }
}
}
]
)
Hasil:
{ "interpreted" : "Homer", "literal" : "$name" }
Dalam contoh ini, kami mengembalikan nilai name
kolom dengan menggunakan $name
untuk merujuknya.
Kami juga mengembalikan nilai literal $name
, tanpa MongoDB mengartikannya sebagai name
bidang:
Contoh 2
Misalkan koleksi kita berisi dokumen berikut:
{ "_id" : 2, "a" : 10, "b" : 5 }
Berikut contoh lain penggunaan $literal
:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 2 ] } } },
{
$project:
{
_id: 0,
interpreted: { $multiply: [ "$a", "$b" ] },
literal: { $literal: { $multiply: [ "$a", "$b" ] } }
}
}
]
)
Hasil:
{ "interpreted" : 50, "literal" : { "$multiply" : [ "$a", "$b" ] } }
Dalam hal ini, bidang pertama yang dikembalikan berisi hasil $multiply
operator terhadap a
dan b
bidang.
Kolom kedua hanya menampilkan nilai literal yang kami berikan ke $literal
operator.