Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用。在JSON键中,而不是作为属性_Javascript_Node.js_Json - Fatal编程技术网

Javascript 使用。在JSON键中,而不是作为属性

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

我试图使用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
      }
   }
}
电子邮件中的
被解释为
属性
, 那么如何告诉它在
键中使用
作为
字符串
,而不是作为
属性
。我尝试在
[]
中包装
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
在我的字符串中?这是否会在更新或查询时造成任何困难?