Mongodb
$$ 在 MongoDB 中的意義
我最近收到了這段程式碼,它可以在 MongoDB 中生成任意文件。我以前從未在 Mongo 中遇到過**$$**,我很好奇它的意義。
我所知道的是,如果我用一個 $ 執行程式碼,那麼 n 不再出現……有人有解釋嗎?
$$在中的意義是什麼
$$n
程式碼
db.collection.aggregate([ { "$limit": 1 }, { // use $range to generate iterator [1, 2, 3] "$addFields": { "rg": { "$range": [ 1, 4 ] }, globalVar: 0.001 } }, { // do the mapping according to logic "$addFields": { "cte": { "$map": { "input": "$rg", "as": "n", "in": { n: "$$n", f1: { "$multiply": [ "$$n", 20 ] }, f2: { "$cond": { "if": { $lt: [ { "$multiply": [ "$$n", 6 ] }, { "$multiply": [ "$globalVar", 100 ] } ] }, "then": { "$multiply": [ "$$n", 6 ] }, "else": { "$multiply": [ "$globalVar", 100 ] } } } } } } } }, { // wrangle back to expected form "$unwind": "$cte" }, { "$replaceRoot": { "newRoot": "$cte" } } ]);
蒙戈遊樂場
{ // do the mapping according to logic "$addFields": { "cte": { "$map": { ... "input": "$rg", "as": "n", "in": { f1: { "$multiply": [ "$$n", 20 ] }, ...
這是特定於使用$map聚合數組運算符的。
$map
用於遍歷數組欄位並轉換每個數組欄位元素。具有$map
參數 -input
指定數組欄位名稱,as
指定迭代中的目前數組元素標識符,以及迭代in
中處理每個數組元素的位置。在 中
in
,目前數組元素使用$$
前綴引用——這是所需的語法。n
是在 - 中定義的,其中"as": "n"
是n
使用者定義的值(可以是任何值,例如 、、n
等)。但是,這是通過在使用時在使用者定義的值(或等)之前添加兩個美元 ( ) 來引用的。element``rg_element``$$``$$n``$$element
我所知道的是,如果我用一個 $ 執行程式碼,那麼 n 不再出現……有人有解釋嗎?
這是因為 MongoDB 查詢處理器假定它
n
是文件中的一個欄位——事實並非如此。因此,它具有“不存在”的標識。另外,請注意:
$$
前綴還與其他聚合運算符一起使用,$filter
例如$lookup
和$let
。此外,$$
前綴出現在聚合系統變數-$$ROOT
、$$CURRENT
等中。
聚合表達式中有變數:
https://docs.mongodb.com/manual/reference/aggregation-variables/