我正在尝试使用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@email
和com
被解释为字符串,但不是两者之间的dot
。如何将其用作完整字符串?
答案 0 :(得分:0)
Mongo docs建议用Unicode等价字符替换$
和.
之类的非法字符。
例如:
在这些情况下,密钥将需要替换保留的$和。 字符。任何字符都足够,但请考虑使用 等同于Unicode的全角字符:U + FF04(即“ $”)和U + FF0E(即 “。”)。
可以查看原始答案和相关讨论here