采用 。在JSON键中而不是作为属性

时间:2019-05-30 03:48:39

标签: javascript node.js json

我正在尝试使用NodeJs更新MongoDB中的数据,我想将用户电子邮件用作键,将对象用作值,例如

changes : {
    user@email.com : {
        //key value pairs
    },
    user2@email.com : {
        //key value pairs
    }
}

问题是我正在使用此代码

var query = {id:"01"},
update = { "$set": { } };
update["$set"]["changes."+ req.session.email ] = req.body; //This line is causing problem
model.findOneAndUpdate(query, update, function(err, result){
    if(err){
        throw err;
    }
    console.log('Updated');
});

"changes."+req.session.email的格式为changes.user@email.com,并在MongoDb中另存为

changes : {
   user@email : {
      com : {
           //data from req.body
      }
   }
}

电子邮件中的.被解释为property, 因此,我如何告诉它在.中将string用作key,而不是property。我尝试将req.session.email包装在[]中,但是没有用。

感谢您的帮助。

编辑

我知道我不应该在键名中使用.,但是可以使用string,并且我只想使用一个包含dot的字符串它,但我不知道如何使Node将其读取为完整字符串。

这就是我想要的:

changes : {
    "user@email.com" : {
        //key value pairs
    },
    "user2@email.com" : {
        //key value pairs
    }
}

我现在得到的是:

changes : {
   "user@email" : {
      "com" : {
           //data from req.body
      }
   }
}

user@emailcom被解释为字符串,但不是两者之间的dot。如何将其用作完整字符串

1 个答案:

答案 0 :(得分:0)

Mongo docs建议用Unicode等价字符替换$.之类的非法字符。

例如:

  

在这些情况下,密钥将需要替换保留的$和。   字符。任何字符都足够,但请考虑使用   等同于Unicode的全角字符:U + FF04(即“ $”)和U + FF0E(即   “。”)。

可以查看原始答案和相关讨论here