2012-01-18 8 views
0

私はCodeigniterとMongoDBを使ってWebアプリケーションを開発しています。ユーザーはお気に入りのサウンドを「ブックマーク」として保存できます。各ユーザーは1つのドキュメントを取得し、各サウンドはそのドキュメントのサウンドと呼ばれる配列に追加されます。各サウンドには、ブックマークにも保存される一連のタグがあります。ブックマーク文書内のユーザーブックマークを検索するにはどうすればよいですか?私はそれらが(タグ配列からの)タグで検索できるようにしたい。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つの項目(タグ配列)と一致する場合でも、配列内のすべての項目を返します。 –

+1

はい、文書の一部ではなく、常に文書を照会します。配列の特定の要素だけを返すことはできません。あなたはあなたがあなたの質問にしたいと言わなかった。特定のドキュメントを照会する場合は、それらをトップレベルのコレクションに配置する必要があります。 –

+0

しかし、特定のクエリと一致する配列内のすべてのアイテムを取得できません。 –

関連する問題