#javascript #node.js #json #mongodb #mongoose
Вопрос:
Я получаю данные после декодирования строки base64 в JSON, и это выглядит так.
{
List1: [ 'mk singh', 'saurav kashsyap' ],
List2: [
{ labelName: 'Location', values: ['India','America','Japan'] },
{ labelName: 'gender', values: ['male'] }
]
}
Мне нужен 2-й элемент List2, который является { Имя метки: ‘пол’, значения: [‘мужчина’]},
и если я хочу найти всех пользователей из профилей пользователей, у которых есть поле в качестве значения имени метки (из приведенного выше списка 2), а значение-что-либо из соответствующего массива значений имени метки (из приведенного выше списка 2).
которые будут идентичны профилям пользователей(«Местоположение»:{$в:[«Индия»,»Америка»,»Япония»]}
Вот схема пользовательских профилей:
{ "_id" : "6123e7ahdhdfdj334733",
"name" : "Mohit Kumar",
"gender" : "male",
"Location" : "India",
},
{ "_id" : "6123e7ahdhdfdj334731",
"name" : "saurav Kashyap",
"gender" : "male",
"Location" : "Nepal",
},
{ "_id" : "6123e7ahdhdfdj334720",
"name" : "Shaline",
"gender" : "female",
"Location" : "america",
},
и вот мой код
app.get("/getresult", (req, res) => {
let b64string = req.query.filters;
let buf = Buffer.from(b64string, 'base64');
let asciiData = buf.toString('ascii'); //into ascii character
let parseData = JSON.parse(`${asciiData}`); // parsed JSON string
let field = parseData.List2[1].labelName; // gender
let value = parseData.List2[1].values; //['male']
user_profiles.find({
[field]: {$in:[value]}
}, (err, result) => {
if (!err) {
res.send(result);
}
})
});
но я получаю пустой массив(результат). Я не знаю, где я делаю что-то не так.
Пожалуйста, помогите.
Ответ №1:
Ваша value
переменная уже является массивом, поэтому вам нужно изменить свой код на:
user_profiles.find({
[field]: { $in: value } // instead of { $in: [value] }
}
Комментарии:
1. Я применил ваше предложение, а также изменил » пусть ParseData = JSON.parse(asciiData)». Теперь все работает нормально. Спасибо