【问题标题】:MongoError: key $get must not start with '$'MongoError: 键 $get 不能以 '$' 开头
【发布时间】:2017-02-07 05:53:18
【问题描述】:

我使用节点 js 将对象插入到服务器端的 mongo db 中,并表达 js 框架和前端我使用 angular js。但是抛出错误是 MongoError: key $get must not start用'$'

server.js

app
.use(bodyParser.json())
.post('/contact', upload.single('file'), function(req,res){


            var contact = req.body;
            delete contact.$promise;
            delete contact.$resolved;
            console.log(contact);
            //console.log(req.file);

            contact.userId = 1;

             db.collection(CONTACTS_COLLECTION).insertOne(contact, function(err, doc) {
                if (err) {
                  console.log(err + " Unsuccess");
                } else {
                  console.log(doc.ops[0]);
                  res.status(201).json(doc.ops[0]);
                }
              });

})

在控制台显示联系人值

{ firstName: 'abc,text',
 lastName: 'abc,text',
 toJSON: 'function (){var a=v({},this);delete a.$promise;delete  a.$resolved;return a}',
'$get': 'function (a,b,d){x(a)&&(d=b,b=a,a=   {});a=m[c].call(this,a,this,b,d);return a.$promise||a}',
'$save': 'function (a,b,d){x(a)&&(d=b,b=a,a={});a=m[c].call(this,a,this,b,d);return a.$promise||a}',
'$query': 'function (a,b,d){x(a)&&(d=b,b=a,a={});a=m[c].call(this,a,this,b,d);return a.$promise||a}',
'$remove': 'function (a,b,d){x(a)&&(d=b,b=a,a={});a=m[c].call(this,a,this,b,d);return a.$promise||a}',
'$delete': 'function (a,b,d){x(a)&&(d=b,b=a,a={});a=m[c].call(this,a,this,b,d);return a.$promise||a}',
'$update': 'function (a,b,d){x(a)&&(d=b,b=a,a={});a=m[c].call(this,a,this,b,d);return a.$promise||a}' }

错误

MongoError: key $get must not start with '$' Unsuccess

提前谢谢你

【问题讨论】:

  • 我只想在数据库中存储 firstName 和 lastName 的值

标签: javascript angularjs node.js mongodb express


【解决方案1】:

您是否真的要存储控制台中显示的相同联系人?使用所有的 $ 命令?还是它被不受欢迎地附加了?您从前端发送什么对象?

作为 mongoDB 的答案 $ 是一个保留关键字,不应在您尝试保存的文档的键中使用它。如果它们允许在键中使用 $,则查询将开始失败,因为 mongo 使用 $ 关键字具有特殊用途,这也将是类似于 SQL 注入的安全威胁。

作为一种解决方案,如果您真的想用相同的数据存储联系人,我建议将 $get 替换为 get 或 _get,类似地,将所有键替换为 $ 关键字。

谢谢

【讨论】:

  • 好的,我上面的问题已经解决了……另一个是我想存储 req.body 值和 req.file 联系方式……你给我解决方案吗?
  • 如果您的 request.file 是一个文件,不希望存储在同一个集合中,您可能希望看到 mongo gridfs 解决方案,它将文件存储为块和元数据
  • 在联系人集合中,一条记录有一个文件,我想在请求到来时在网页上检索该记录和文件。那么我如何将该文件与特定 ID 相关联...。 . 简而言之,我想像在 mysql 数据库中一样将文件存储在一条记录中
猜你喜欢
  • 2015-06-25
  • 2015-11-19
  • 1970-01-01
  • 2013-11-07
  • 2015-11-17
  • 2017-03-28
  • 1970-01-01
  • 2019-05-19
  • 2018-02-22
相关资源
最近更新 更多