#node.js #mongodb #express #mongoose
#node.js #mongodb #выразить #мангуст
Вопрос:
У меня есть такая БД:
age: {
30: {
15: {
Man: "Hello 3015",
Girl: "Hey 15"
},
30: {
Man: "Hello 3030",
Girl: "Hey 30"
}
},
40: {
15: {
Man: "Hello 4015",
Girl: "Hey 4015"
},
30: {
Man: "Hello 4030",
Girl: "Hey 4030"
}
},
}
И теперь я передаю 3 переменные:
Возрастной поиск = 30, числовой поиск = 15, пол = «Мужчина»
Как я могу получить результат «Привет 3015»?
Я думаю, что это так:
var search = "age" "." ageSearch "."
numberSearch "." gender
db.find({}, {search}, (err, obj) => {
if (err) {
console.log(err);
} else {
console.log(obj);
}
});
Но это не работает.
У вас есть идея?
Ответ №1:
Итак, давайте отладим это:
var search = "age" "." ageSearch "."
numberSearch "." gender
И вы передаете:
Возрастной поиск = 30, числовой поиск = 15, пол = «Мужчина»
итак, поиск:
"age.30.15.Man"
db.find({}, {"age.30.15.Man"}, (err, obj) => {....
Для меня это не похоже на правильный синтаксис. Вот примеры использования из документации драйверов.
Я думаю, что первым вводом в db.find должен быть поисковый запрос, у вас есть пустой объект {}.
Кроме того, запрос сам по себе является объектом, а не строкой. Итак, вы хотели бы что-то вроде:
{'age.30.15.Man': {$exists: true}}
Подумайте, действительно ли это правильная схема для ваших объектов. Вы не можете использовать индекс при поиске ключей, поэтому по мере роста ваших данных это будет происходить очень медленно.