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