Как найти значение вложенного документа с ключевой переменной?

#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}}
  

Подумайте, действительно ли это правильная схема для ваших объектов. Вы не можете использовать индекс при поиске ключей, поэтому по мере роста ваших данных это будет происходить очень медленно.