MongoDB在对象数组中查找

时间:2015-03-04 13:20:22

标签: python arrays mongodb mongodb-query

我想查询Mongodb:找到所有用户,在任何对象的数组项中都有' artist' = Iowa。 这是我收藏的Robomongo: mongo_find_music 在Python中,我正在做:

Vkuser._get_collection().find({
  'member_of_group': 20548570,
  'my_music': {
    'items': {
      '$elemMatch': {
        'artist': 'Iowa'
      }
    }
  }
}) 

但这没有任何回报。还试过这个: {'member_of_group': 20548570, 'my_music': {'$elemMatch': {'$.artist': 'Iowa'}}}并且没有用。

以下是包含数组的文档的一部分:

    "can_see_audio" : 1,
"my_music" : {
    "items" : [ 
        {
            "name" : "Anastasia Plotnikova",
            "photo" : "http://cs620227.vk.me/v620227451/9c47/w_okXehPbYc.jpg",
            "id" : "864451",
            "name_gen" : "Anastasia"
        }, 
        {
            "title" : "Ain't Talkin' 'Bout Dub",
            "url" : "http://cs4964.vk.me/u14671028/audios/c5b8a0735224.mp3?extra=jgV4ZQrFrsfxZCJf4gsRgnKWvdAfIqjE0M6eMtxGFpj2yp4vjs5DYgAGImPMp4mCUSUGJzoyGeh2Es6L-H51TPa3Q_Q",
            "lyrics_id" : 24313846,
            "artist" : "Apollo 440",
            "genre_id" : 18,
            "id" : 344280392,
            "owner_id" : 864451,
            "duration" : 279
        }, 
        {
            "title" : "Animals",
            "url" : "http://cs1316.vk.me/u4198685/audios/4b9e4536e1be.mp3?extra=TScqXzQ_qaEFKHG8trrwbFyNvjvJKEOLnwOWHJZl_cW5EA6K3a9vimaMpx-Yk5_k41vRPywzuThN_IHT8mbKlPcSigw",
            "lyrics_id" : 166037,
            "artist" : "Nickelback",
            "id" : 344280351,
            "owner_id" : 864451,
            "duration" : 186
        }, 

1 个答案:

答案 0 :(得分:1)

以下查询应该有效。您可以使用点表示法查询子文档和数组。

Vkuser._get_collection().find({
  'member_of_group': 20548570,
  'my_music.items.artist':'Iowa'
})

以下查询在mongo shell中为我工作

db.collection1.find({ "my_music.items.artist" : "Iowa" })