定義
$literal解析せずに値を返します。 集計パイプラインが式として解釈できる値には、 を使用します。
$literal式は次の構文をとります。{ $literal: <value> }
動作
が式の場合、<value> $literalは式を評価せず、代わりに解析されていない式を返します。
例 | 結果 |
|---|---|
|
|
|
|
例
$ をリテラルとして扱う
式では、ドル記号$はフィールドパスとして評価されます。フィールドへのアクセスを提供します。 たとえば、 $eq式$eq: [ "$price", "$1" ]は、ドキュメント内のpriceという名前のフィールドの値と1という名前のフィールドの値との間で等価性チェックを実行します。
次の例では、$literal 式を使用して、ドル記号 を含む string"$1" を定数値として扱います。
storeInventory コレクションには、次のドキュメントがあります。
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" } ] } } } ] )
この操作では、 priceフィールドの値が string と等しいかどうかを示すブール値を持つcostsOneDollar "$1"名前のフィールドがプロジェクションされます。
{ "_id" : 1, "costsOneDollar" : false } { "_id" : 2, "costsOneDollar" : false } { "_id" : 3, "costsOneDollar" : true }
値を持つ新しいフィールドのプロジェクション 1
$projectステージでは、式 を使用して出力に<field>: 1 <field>を含めます。次の例では、$literal を使用して、1 の値に設定された新しいフィールドを返します。
books コレクションには、次のドキュメントがあります。
db.books.insertMany([ { "_id" : 1, "title" : "Dracula", "condition": "new" }, { "_id" : 2, "title" : "The Little Prince", "condition": "new" } ])
式は、値{ $literal: 1 } に設定された新しい フィールドを返します。editionNumber1
db.books.aggregate( [ { $project: { "title": 1, "editionNumber": { $literal: 1 } } } ] )
この操作の結果、次のドキュメントが作成されます。
{ "_id" : 1, "title" : "Dracula", "editionNumber" : 1 } { "_id" : 2, "title" : "The Little Prince", "editionNumber" : 1 }