【问题标题】:Convert a String to Object (json) MongoDB shell将字符串转换为对象 (json) MongoDB shell
【发布时间】:2015-07-08 20:44:28
【问题描述】:

我正在尝试执行以下命令

function(field) {

   //field = '{"'+field+'":{$exists:true}}'; Not working
   //field = tojson(field) Not working
   //field = {"events.concessionDetails":{$exists:true}}; Works if passed as input param


    print(field);
    var cur = db.cssCases.aggregate([

    {$match:{"events.eventType" : {$nin:["FAIL_SYSTEM_SERVICE_CALL"]}}},

    { $unwind: "$events" },

    {$match:field},

    {$group:{_id:{eventType:"$events.eventType"}}},

    { $limit : 100 }

    ])
}

如果我为该字段传递以下值,它就可以正常工作。

var field1 = {"events.concessionDetails":{$exists:true}};

但我不想传递'{$exists:true}',只想传递events.concessionDetails 并形成完整的命令,下面是我想执行的一些代码来完成这项任务。

我尝试了以下但没有成功,

tojson(字段) tojsonObject(字段) 评估(字段)

有什么方法可以将输入字符串转换为 json 查询以在查询中使用它。

【问题讨论】:

  • 第一行不起作用,因为您将其转换为字符串文字而不是 JS 原语(a.k.a 对象),尝试类似(无需测试这一点)var field = {""+field+"": {$exists: true}}
  • @Sammaye:转义字符是 Javascript 中的 \,我们试过了,我们也试过你的,它的工作原理。
  • 那么它现在可以工作了吗?

标签: mongodb mongodb-query aggregation-framework mongo-shell


【解决方案1】:

为什么不将{$exists: true} 部分放在函数代码中?

类似:

var field = "events.concessionDetails" // function argument

var match = {
    $match: {}
}
match.$match[field] = { exists: true }

然后在调用聚合方法时使用match 变量。

【讨论】:

    猜你喜欢
    • 2019-08-27
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2012-06-14
    • 2012-02-20
    • 2015-01-03
    相关资源
    最近更新 更多