2012-01-18 3 views
0

Я разрабатываю веб-приложение с использованием Codeigniter и MongoDB. Пользователи могут сохранять свои избранные звуки в виде «закладок». Каждый пользователь получает один документ, а затем каждый звук добавляется к массиву в этом документе, называемом звуком. Каждый звук получил набор тегов, который также сохраняется в закладке. Как я могу выполнить поиск закладок пользователей в своем документе с закладками? Я хочу, чтобы они могли искать по тегам (из массива тегов).Поиск вложенных массивов в документах MongoDB

Это мой MongoDB документ:

{ 
    "_id": ObjectId("4f15846a112bf6b725000000"), 
    "owner": { 
     "user_id": ObjectId("4f147e1709ab662061000000"), 
     "session_id": "3424e3155a01e78c50a8498f78cc51d9" 
    }, 
    "sound_files": [ 
     { 
      "sound_id": ObjectId("4f1480ff09ab661a61000001"), 
      "sound_url": "http://s3.amazonaws.com/4c/864ea8e92e6ec4408e248cc9brf008bd/18.wav", 
      "sound_tags": [ 
       "sound", 
       "new york", 
       "cool" 
      ] 
     }, 
       { 
      "sound_id": ObjectId("4f1480ff09ab661a61000001"), 
      "sound_url": "http://s3.amazonaws.com/4c/864ea8e92e6ec4408e248cc9brf008bd/12.wav", 
      "sound_tags": [ 
       "sound", 
       "happy", 
       "ocean" 
      ] 
     } 
    ], 
    "total": 1 
} 

ответ

1
db.col.find({'sound_files.sound_tags':"sound"}) 

EDIT: Не совсем то, что OP ищет, по-видимому. Ожидание более точного описания требования.

+0

Это не работает. Он возвращает только все элементы массива, даже если теги соответствуют только одному элементу (массив тегов). –

+1

Да, вы всегда запрашиваете документы, а не часть документов. Вы можете не только вернуть определенный элемент массива. Вы не упомянули, что хотите в своем вопросе. Если вы хотите запросить конкретные документы, вам нужно будет поместить их в коллекцию верхнего уровня. –

+0

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

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