2010-04-26 80 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