Как получить доступ / прочитать вложенное поле / элемент монго - PullRequest
0 голосов
/ 05 сентября 2018

После прочтения Данные обновления MongoDB во вложенном поле Я установил вложенный элемент, используя
db.users.update ({_id: '123'}, { '$set': {"friends.0.emails.0.email" : '2222'} });

Как получить доступ к этому элементу? (только подэлемент, а не весь документ)
например db.users.findOne({_id: '123'}, {'$elem':"friends.0.emails.0.email"});

Например:
Если бы это был объект JavaScript, он был бы
db.users["123"].friends[0].emails[0].email
Если бы это был диктат Python, это было бы
db.users["123"]["friends"][0]["emails"][0]["email"]
Если бы это был рубиновый хэш, это также было бы
db.users["123"]["friends"][0]["emails"][0]["email"]

В идеале ответом должна быть функция, которая принимает список ключей (например, [ "friend", 0, "emails", 0 , "email" ]) и возвращает значение этого вложенного элемента (например, 2222).

Я студент факультета компьютерных наук и работаю разработчиком с полным стеком: никто из моих коллег, профессоров, коллег или начальников не может ответить на этот вопрос. Я пытаюсь выучить монго, и доступ к элементу - одна из первых вещей, которые я подумал изучить Я потратил несколько дней на чтение связанных вопросов переполнения стека и документации Mongo о $ filter, $ elem, операторе точки и операторе $, но, похоже, ничто не объясняет, как просто получить доступ к вложенному элементу.

Вот некоторые похожие вопросы, которые я нашел, которые не , которые я ищу
MongoDB - как запросить вложенный элемент внутри коллекции?
^ Рассказывает о ряде элементов (я хочу только 1)
Запрос вложенного массива MongoDB
^ Проверка членства в массивах массивов (я просто хочу получить доступ к элементу, не проверяющему членство)
Получить определенный элемент из массива mongoDB
^ Фильтрует с использованием запроса (color = 'Red'), но я не хочу фильтровать по запросу, я хочу получить точно уникальный индекс (например, 0-е письмо)
получить вложенный документ с помощью mgo
^ это вроде как близко, но пользователь никогда не публиковал ответ на монго и вместо этого ссылался на сообщение go-Lang. Это также не покрывает возможность массивов.

1 Ответ

0 голосов
/ 02 февраля 2019

Если кому-то все еще интересно это, решение может быть в MongoDB Docs :

Основной синтаксис:

db.document.find({[YOUR SEARCH PARAMETER HERE]},{[THE FIELD(S) YOU WANT RETURNED HERE]}

В документации они приводят пример, поэтому я вставил его сюда вместе с эквивалентом SQL, который должен помочь прояснить ситуацию.

Вот набор документов и структура документа:

db.inventory.insertMany( [
  { item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },
  { item: "notebook", status: "A",  size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },
  { item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },
  { item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },
  { item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);

Вот запрос для получения полей "item" и "status" из записей, где "status = A"

db.inventory.find( { status: "A" }, { item: 1, status: 1 } )

SQL-эквивалент:

SELECT _id, item, status from inventory WHERE status = "A"

Тривиально сократить это до выбора одной записи, а не всех записей, где "status = A".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...