2015-07-15 3 views
0

Я пытаюсь использовать что-то, как следуетMongoDB/метеор, если поддокумент поле существует, когда поле является переменной

collection.find({"myField."+variable : {$exists: true}) 

Но очевидно, что не работает, потому что коллекции не принимают строку. Вместо этого я пытался строить аа полностью запрос строки в формате JSON, но это не будет разбирать правильно, потому что я просто искал имя поля, а не весь объект

var qry = '{"myField.'+variable+'"}'; //no go 

Я также попытался коллекция метеора поля логики

var qry = 'myField.'+variable; 
collection.find({}, {fields: {qry: 1}}) 

не напрасно. Я знаю, что запрос может принимать объект JSON, но я не уверен, как это записать.

ответ

1

Это может быть достигнуто с помощью монтажного кронштейна нотацию

var fieldQuery = {}; 
fieldQuery["myField"+variable] = {$exists: true}; 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors#Bracket_notation

+0

спасибо, я на самом деле решил это делать это: Var запрос = {}; \t \t query ['myField.' + Variable] = null; – frei

2

Дайте этому попытку:

var selector = {}; 
selector["myField." + variable] = {$exists: true}; 
Collection.find(selector); 
+0

Что делать, если я хотел найти что-то с несколькими селекторами? например, 'find (x: false, y: true, z: {$ exists: false})' – frei

+0

Приведенный вами пример должен быть: 'find ({x: false, y: true, z: {$ exists: ложь}}) '. Поскольку вы можете видеть, что селектор - это единственный объект - просто добавьте все поля, которые вам нужны. Работая с моим ответом, вы можете инициализировать 'selector' как' {x: false, y: true} ', а затем динамически добавлять' z' позже перед вызовом 'find'. Если это не ясно, вы можете дать более подробную информацию, и я могу обновить ответ, или вы можете задать другой вопрос. –

+0

Я попытался добавить объект запроса, просто указав другое поле и значение. Поэтому я сделал 'selector [myField.variable] = {$ exists: true};' тогда я сделал 'selector ['myOtherField'] = значение' и сделал' Collection.find (selector) '. Если это так, как это должно быть сделано, возможно, есть что-то еще неправильное, но я просто хочу знать, есть ли его правильный синтаксис. Когда я регистрирую объект-селектор, я вижу, что первое поле имеет тип Object, но второе поле является просто «myOtherField: value», поэтому я не уверен, что это проблема. Я также попытался создать строку запроса с помощью селектора '$ and'. Пожалуйста, уточните ответ, спасибо! – frei

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