2013-04-03 3 views
0

Я создаю проект с использованием mongodb и php, поэтому моя база данных содержит следующую запись.Извлечь часть из массива документа

{ 
    "_id": { 
     "$id": "515bb7e2a00b2add0b000001" 
    }, 
    "user_id": "user_8888", 
    "events": { 
     "common test I": { 
      "subject": "common test I", 
      "start_date": "04/14/2013", 
      "start_time": "8.00 AM", 
      "end_date": "04/14/2013", 
      "end_time": "10.30 AM", 
      "all_day_event": "false", 
      "discription": "no discription", 
      "location": "STC", 
      "private": "false", 
      "time_zone": "IST", 
      "alarm": "true", 
      "alarm_threshold": "5", 
      "status": "true" 
     } 
    } 
} 

Так что, используя запрос, как я извлекаю событие «common test I» из записи. Результат должен быть:

{ 
    "subject": "common test I", 
    "start_date": "04/14/2013", 
    "start_time": "8.00 AM", 
    "end_date": "04/14/2013", 
    "end_time": "10.30 AM", 
    "all_day_event": "false", 
    "discription": "no discription", 
    "location": "STC", 
    "private": "false", 
    "time_zone": "IST", 
    "alarm": "true", 
    "alarm_threshold": "5", 
    "status": "true" 
} 

Возможно ли это?

+0

Спасибо за редактирование, в противном случае это выглядело все по-другому, и я был так смущен – Devesh

ответ

0

db.collection.find({},{"events.common test I":1,_id:0})

+0

большое спасибо !!!! – user2047701

0

Вы можете указать, какие поля документа вы хотите получить в методе поиска.

См. PHP.net Reference Manual for MongoCollection::find.

Что-то вроде

$collection->find(array(), array('events.common test I'=>true)); 

Обратите внимание, что "Поле _id всегда возвращается."

Хотя я бы предложил не использовать пробелы в объектных ключах/именах полей.

+0

Могу ли я искать этот документ с использованием «start_date» без использования ключа? Я имею в виду «common test I» – user2047701

+0

Было бы проще, если бы вы использовали набор вместо ассоциативного массива для событий (например, '{events: [{start_date: '' , ...}, {start_date: '', ...}]} ') Затем попробуйте' find (array ('events. $. start_date' => '04/14/2013')) ' Вы также можете достичь этого, используя оператор [elemMatch] (http://docs.mongodb.org/manual/reference/operator/elemMatch/). – graup

+0

спасибо !!!!! – user2047701

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