2010-04-26 79 views

回答

4

來自MongoDB docs「the」。「字符不能出現在鍵名稱的任何地方「。它看起來像你必須提出一個編碼方案或沒有。

0

對於PHP,我用HTML值替換期間。那是"."

IT賣場裏的MongoDB這樣的:

"validations" : { 
    "4e25adbb1b0a55400e030000" : { 
    "associate" : "true" 
    }, 
    "4e25adb11b0a55400e010000" : { 
     "associate" : "true" 
    } 
    } 

和PHP代碼...

$entry = array('associate' => $associate);   
    $data = array('$set' => array('validations.' . str_replace(".", `"."`, $validation) => $entry));  
    $newstatus = $collection->update($key, $data, $options);  
2

你需要躲避鍵。由於看起來大多數人不知道如何正確地轉義字符串,因此步驟如下:

  1. 選擇一個轉義字符(最好選擇一個很少使用的字符)。例如。 '〜'
  2. 爲了逃避,首先用轉義字符前面加上一些序列替換轉義字符的所有實例(例如'〜' - >'〜t'),然後替換您需要轉義的任何字符或序列序列預置了您的轉義字符。例如。 '' - >'〜p'
  3. 對於unescape,首先從第二個轉義序列的所有實例(例如'〜p' - >'。')中移除轉義序列,然後將轉義字符序列轉換爲單個轉義字符例如,「〜S」 - >「〜」)

另外請記住,蒙戈也不允許鍵與「$」開頭,所以你必須做類似的還有

的東西在這裏的一些代碼它是這樣做的:

// returns an escaped mongo key 
exports.escape = function(key) { 
    return key.replace(/~/g, '~s') 
      .replace(/\./g, '~p') 
      .replace(/^\$/g, '~d') 
} 

// returns an unescaped mongo key 
exports.unescape = function(escapedKey) { 
    return escapedKey.replace(/^~d/g, '$') 
        .replace(/~p/g, '.') 
        .replace(/~s/g, '~') 
} 
+0

如果你得到'。〜p'這樣的字符串,這個轉義仍然可以中斷。這裏轉義字符串將是'〜p〜p〜p'。 Unescaping會給你'。〜..',這與實際的字符串不同。 – jvc 2017-09-18 08:34:46

+1

@jvc你是對的!我已經修復瞭解釋和示例轉義函數。讓我知道他們是否還是壞了! – 2017-09-19 02:20:49