Mongodb

$$ 在 MongoDB 中的意義

  • December 6, 2021

我最近收到了這段程式碼,它可以在 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/

引用自:https://dba.stackexchange.com/questions/303482