Javascript 使用。在JSON键中,而不是作为属性
我试图使用NodeJs更新MongoDB中的数据,我想使用用户电子邮件作为键,使用对象作为值,如Javascript 使用。在JSON键中,而不是作为属性,javascript,node.js,json,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 : {
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
}
}
}
电子邮件中的
被解释为属性
,
那么如何告诉它在键中使用
作为字符串
,而不是作为属性
。我尝试在[]
中包装req.session.email
,但没有成功
谢谢你的帮助
编辑
我知道我不应该在键名中使用
,但可以使用字符串
,我只想使用一个包含点的字符串,但我不知道如何使节点将其作为完整字符串读取
以下是我想要的:
changes : {
"user@email.com" : {
//key value pairs
},
"user2@email.com" : {
//key value pairs
}
}
我现在得到的是:
changes : {
"user@email" : {
"com" : {
//data from req.body
}
}
}
user@email
和com
被解释为字符串,而不是它们之间的点。如何将其用作完整字符串?建议将非法字符(如$
和
)替换为Unicode等效字符
例如:
在这些情况下,密钥将需要替换保留的$and。
人物。任何字符都是足够的,但是考虑使用
Unicode全宽等价物:U+FF04(即“$”)和U+FF0E(即。
“)
原始答案和相关讨论见您好Jazib,MongoDB不支持字段对象中的点。但存在一些npm数据包,可以帮助您将“.”转换为另一个字符保存在mongoDBHey@Cuchu中,也许您是对的,但我不想要“点”。我想要字符串作为键。我只想让它将点作为字符串的一部分来读取。“在查询语言中添加支持之前,不建议使用$and.in字段名,官方MongoDB驱动程序也不支持它。”
您现在不能这样做。@Herohtar但我可以使用字符串中的任何内容,对吗?那我必须像user@mail\uff0ecom
在我的字符串中?这是否会在更新或查询时造成任何困难?