【问题标题】:Parsing MongoDB query string with JSON.parse [duplicate]使用 JSON.parse 解析 MongoDB 查询字符串 [重复]
【发布时间】:2020-05-13 15:04:56
【问题描述】:

我正在尝试制作一个 MongoDb 脚本,该脚本从变量数组中传递变量名,然后对该变量执行查询:

var continous = ['b', 'e', 'LBE']; //list of variables

continous.forEach(e => izracun(e));

function izracun(atr) {
    var query = '{ $group: { _id: "'+atr+'", avg: { $avg: "$'+atr+'" }, stdev: { $stdDevPop: "$'+atr+'" }, nonMissing: { $sum: 1 }}}';
    query=JSON.parse(query);
};

查询构造为字符串,但是当我尝试对其进行 JSON.parse 时,出现以下错误:

[js] uncaught exception: SyntaxError: JSON.parse: expected property name or '}' at line 1 column 3 of the JSON data...

变量“查询”在JSON.parse 之前具有以下值:

{ $group: { _id: "b", avg: { $avg: "$b" }, stdev: { $stdDevPop: "$b" }, nonMissing: { $sum: 1 }}}

这里出了什么问题,为什么会出现 JSON.parse 错误?我打算在db.collection.aggregate()中使用查询

【问题讨论】:

  • 你为什么构造一个string查询只是为了在之后将其解析为一个对象?为什么不首先使用一个对象?
  • 不要解析,我认为构造的对象应该按原样工作。试一试

标签: javascript json mongodb


【解决方案1】:

所有键都必须用双引号"括起来才能正确使用JSON.parse

let queryString = '{ "$group": { "_id": "b", "avg": { "$avg": "$b" }, "stdev": { "$stdDevPop": "$b" }, "nonMissing": { "$sum": 1 }}}';
console.log(JSON.parse(queryString))

注意:- 如果您想在查询中包含日期或正则表达式,您需要使用带有JSON.parse 的回调函数并将其转换为所需的数据类型

因此,使用 Object 代替查询字符串是更好的选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2011-02-27
    • 1970-01-01
    相关资源
    最近更新 更多