2012-02-02 2 views
0

У меня есть коллекция под названием users. Каждый пользовательский документ имеет встроенный документ, называемый номерами телефонов.MongoDB - получить список встроенных элементов

} 
    "_id": ObjectId("4f2984b1af06e80418000000"), 
    "User_FirstName": "Frank", 
    "User_LastName": "Williams", 
    "User_PhoneNumbers": [ 
        {"Phone_Type": "Home","Phone_Number: "555-555-5555" }, 
        {"Phone_Type": "Mobile","Phone_Number: "333-333-3333" } 
        ] 
} 

Я пытаюсь отобразить все номера телефонов для пользователя под названием «Фрэнк Уильямс». Я хотел бы использовать цикл, который возвращает результаты (все номера телефонов для конкретного пользователя):

Home, 555-555-5555 
Mobile, 333-333-33333 

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

ответ

1

В лучшем случае вы можете вернуть только весь массив User_PhoneNumbers. Вы не можете выбрать отдельные элементы. (Разумеется, речь идет о регулярных запросах. С помощью карты-сокращения или предстоящей структуры агрегации вы сможете это сделать).

db.collection.find({"_id": ObjectId("4f2984b1af06e80418000000")}, 
        {"User_PhoneNumbers": 1, _id: -1}); 

Этот запрос возвратит этот документ:

{ 
    "User_PhoneNumbers": [ 
       {"Phone_Type": "Home","Phone_Number": "555-555-5555" }, 
       {"Phone_Type": "Mobile","Phone_Number": "333-333-3333" } 
      ] 
} 

Тогда в PHP вы можете справиться с этим, как вы.

+0

Благодарим за помощь. Итак, я понял, что вы запускаете запрос в оболочке, но знаете ли вы, кто он запускается в php? $ cursor = $ collection-> find (array ("_ id" => ObjectId ("4f2984b1af06e80418000000"), array ("User_PhoneNumbers"))? Я пробовал это, но не работал. Спасибо. – user982853

+0

@ user982853: Я полагаю, это '$ collection-> find (array ("_ id" => ObjectId ("4f2984b1af06e80418000000"), array ("User_PhoneNumbers" => 1)) ' –

+0

Мне не нравится беспокоить вас этим, но когда я пытаюсь выполнить цикл, он ничего не возвращает Я могу сделать что-то не так: $ cursor = $ collection-> find (array ("_ id" => ObjectId ("4f2984b1af06e80418000000"), array ("User_PhoneNumbers" => 1)); foreach ($ cursor as $ key) { echo $ key ['Phone_Number'];}?>, и это вызывает ошибку: Undefined index: User_PhoneNumbers в C: \ wamp ... – user982853

Смежные вопросы