Я хочу запросить FireBase, но это не позволяет. Есть ли способ динамически запрашивать FireBase? Мне нужно обработать очень специфические c случаи - например, если пользователь выбирает «Не имеет значения», мне нужно удалить этот фильтр предпочтений из запроса, некоторые поля являются типами данных массива, а некоторые - строками, а некоторые - числами. , Мне нужно иметь возможность обрабатывать все типы типов данных и заполнять предложение where соответствующим образом. Вручную проверяя каждое поле и вызывая каждое поле, вы обойдетесь налогом в системе (есть более 20 полей для запроса). Любой совет был бы хорош!
for(ddp in docDataPreferences){
if(docDataPreferences[ddp] == "Doesn't Matter"){
allDoesntMatterPreferences.push(ddp);
} else if(docDataPreferences[ddp] != "Doesn't Matter" && docDataPreferences[ddp] != '' && docDataPreferences[ddp] != undefined) {
keysWithValues.push(ddp);
whereClause += ".where('preferences."+ ddp + "', 'array-contains-any', " + JSON.stringify(docDataPreferences[ddp]) +")"
}
}
var usersMatchesCollection = config.db.collection("Users");
var query = usersMatchesCollection + whereClause;
await query.get().then( function (matchesQuerySnapshot) {
matchesQuerySnapshot.forEach(function(doc) {
//...do something
})
})
Ошибка типа: query.get не является функцией. (В 'query.get ()', query.get 'не определен)]
Я вижу, что предложение where печатается правильно, но я предполагаю, что вы не можете объединить объект и строка. Когда я вручную добавляю возвращенный whereClause, например, так:
var query = usersMatchesCollection.where('preferences.datingPrefDistance', '==', 22).where('preferences.datingPrefDrinking', '==', "No").where('preferences.datingPrefEducation', '==', "Doctorate").where('preferences.datingPrefKids', '==', "No").where('preferences.datingPrefMarried', '==', "No").where('preferences.datingPrefSmokingCig', '==', "No").where('preferences.datingPrefSmokingPot', '==', "No").where('preferences.prefDrinking', '==', "No").where('preferences.prefEducation', '==', "Doctorate").where('preferences.prefIdentifyAs', '==', "Male").where('preferences.prefKids', '==', "No").where('preferences.prefMarried', '==', "No").where('preferences.prefSmokingPot', '==', "No")
, это работает. Таким образом, именно конкатенация вызывает проблему.
Есть ли обходной путь?