0

Я пытаюсь выполнить следующую командупреобразовать строку в объект (JSON) MongoDB оболочки

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 (поле) Eval (поле)

Есть ли способ, что мы можем использовать для преобразования входной строки в JSON запроса использовать его в запросе.

+0

Первая строка не будет работать, потому что вы конвертируете ее в строковый литерал вместо примитива JS (aka Object), попробуйте что-то вроде (без тестирования этого одного бита) 'var field = {" "+ field +" " : {$ exists: true}} ' – Sammaye

+0

@Sammaye: escape-символ \ в Javascript, мы попробовали его, и мы попробовали ваш, а также его работу. –

+0

Итак, он работает сейчас? – Sammaye

ответ

0

Почему бы вам не положить часть {$exists: true} в свой функциональный код?

Что-то вроде:

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

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

Затем используйте переменную match при вызове совокупного метода.

Смежные вопросы