MongoDB – как запросить вложенный элемент внутри коллекции?

У меня есть некоторые данные, которые выглядят так:

[ { "_id" : ObjectId("4e2f2af16f1e7e4c2000000a"), "advertisers" : [ { "created_at" : ISODate("2011-07-26T21:02:19Z"), "category" : "Infinity Pro Spin Air Brush", "updated_at" : ISODate("2011-07-26T21:02:19Z"), "lowered_name" : "conair", "twitter_name" : "", "facebook_page_url" : "", "website_url" : "", "user_ids" : [ ], "blog_url" : "", }, 

и я думал, что такой запрос даст идентификатор рекламодателя:

 var start = new Date(2011, 1, 1); > var end = new Date(2011, 12, 12); > db.agencies.find( { "created_at" : {$gte : start , $lt : end} } , { _id : 1 , program_ids : 1 , advertisers { name : 1 } } ).limit(1).toArray(); 

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

Благодаря!

Используйте точечную нотацию (например, advertisers.name ) для запроса и получения полей из вложенных объектов:

 db.agencies.find({ "advertisers.created_at": { $gte: start, $lt: end } }, { _id: 1, program_ids: 1, "advertisers.name": 1 } }).limit(1).toArray(); 

Ссылка: получение подмножества полей и точечной нотации

 db.agencies.find( { "advertisers.created_at" : {$gte : start , $lt : end} } , { program_ids : 1 , advertisers.name : 1 } ).limit(1).pretty(); 

Существует одна вещь, называемая точечной нотацией, которую предоставляет MongoDB, которая позволяет вам заглядывать в массивы элементов. Использование его так же просто, как добавление точки для каждого массива, который вы хотите ввести.

В твоем случае

  "_id" : ObjectId("4e2f2af16f1e7e4c2000000a"), "advertisers" : [ { "created_at" : ISODate("2011-07-26T21:02:19Z"), "category" : "Infinity Pro Spin Air Brush", "updated_at" : ISODate("2011-07-26T21:02:19Z"), "lowered_name" : "conair", "twitter_name" : "", "facebook_page_url" : "", "website_url" : "", "user_ids" : [ ], "blog_url" : "", }, { ... } 

Если вы хотите войти в массив рекламодателей, чтобы искать свойство created_at внутри каждого из них, вы можете просто написать запрос с свойством {‘ advertisers.created_at ‘: query}, например, следующим образом

 db.agencies.find( { 'advertisers.created_at' : { {$gte : start , $lt : end} ... } 
  • Можно ли использовать mongodb как встроенную базу данных?
  • Служба mongodb не запускается
  • Как вставить элемент в внутренний список MongoDB?
  • Поиск регулярного выражения MongoDB по целочисленному значению
  • Что такое оператор разматывания в MongoDB?
  • Как удалить N номеров документов в mongodb
  • Как использовать Elasticsearch с MongoDB?
  • Создание индексов Multifield в Mongoose / MongoDB
  • Как я могу запросить объекты, на которые ссылаются в MongoDB?
  • Производительность MongoDB по агрегационным запросам
  • mongodb подсчитывает количество различных значений для поля / ключа
  • Давайте будем гением компьютера.