2012-01-18 114 views
0

我正在开发一个使用Codeigniter和MongoDB的Web应用程序。用户可以将他们的收藏夹声音保存为“书签”。每个用户获得一个文档,然后每个声音被附加到该文档中的一个数组,称为声音。每个声音都有一组标签也保存到书签中。如何在书签文档中搜索用户书签?我希望他们能够通过标签进行搜索(来自标签数组)。在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"}) 

编辑:不完全是OP正在寻找明显。等待更精确的要求描述。

+0

这是行不通的。即使标签只匹配一个项目(标签数组),它也只返回数组中的所有项目。 – 2012-01-18 09:35:54

+1

是的,你总是查询文件,而不是文件的一部分。您不仅可以返回数组的特定元素。你没有提到你想问你的问题。如果你想查询特定的文件,你必须把它们放在顶级集合中。 – 2012-01-18 09:42:57

+0

好的,但后来我无法获得匹配特定查询的数组中的所有项目? – 2012-01-18 09:44:43