Как найти определенные вложенные объекты, не зная родительского ключа в mongodb

Я использую javascript и модуль мангуста. У меня есть такой объект

my_object = {
    ShopName: String,
    employees: [String],
    info: {
        NameEmployee_1: {
            age: String,
            work: String,
            city: String,
        },

        NameEmployee_2: {
            age: String,
            work: String,
            city: String,
        }
    } 

}

и я хочу найти всех сотрудников определенного возраста, но не зная имени сотрудника, есть ли способ сделать это?

Я знаю, что вы, например, я могу так что-то вроде этого

db.collection.find({'info.Max': {$exists: true}})

для поиска всех магазинов, в которых есть хотя бы один сотрудник с именем Макс но что, если я хочу, чтобы все магазины имели хотя бы одного сотрудника в возрасте 33 лет?

db.collection.find({'info.<name>.age': '33'}) ?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
600
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать $objectToArray (mongoDB 3.4.4 и выше), $фильтр и $project и получить что-то вроде этого:

db.collection.aggregate([
  {
    $project: {
      obj: {
        $objectToArray: "$info"
      }
    }
  },
  {
    $project: {
      _id: 0,
      obj: {
        $filter: {
          input: "$obj",
          as: "item",
          cond: {
            $eq: [
              "$$item.v.city",
              "NY"
            ]
          }
        }
      }
    }
  },
  {
    $project: {
      info: {
        $arrayToObject: "$obj"
      }
    }
  },
])

Вы можете это увидеть здесь работают

Идея состоит в том, чтобы разбить объект на массив, отфильтровать его, а затем преобразовать этот массив обратно в объект.

Я отфильтровал city, но я уверен, что вы поняли идею.

Спасибо. Можете ли вы вернуть идентификатор и новое имя поля и удалить пустую информацию? mongoplayground.net/p/A4bfCeaY6Op

Qamar 05.10.2021 13:53

Другие вопросы по теме