2016-11-03 269 views
0

這是我的數據。MongoDB搜索對象的嵌套數組

{ 
    "applianceType": "light", 
    "applianceId": "light123", 
    "applianceName": "Light", 
    "applianceImgURL": "https://s3-us-west-2.amazonaws.com/app.tiktok/appliance/icons/lights.svg", 
    "inUsed": false, 
    "collection": [{ 
     "category": "ceiling_light", 
     "catgName": "Ceiling light", 
     "catgImgURL": "https://s3-us-west-2.amazonaws.com/app.tiktok/appliance/catg_thumbs/light/ceiling_light.jpg", 
     "collectionCatgId": "LI-ceil", 
     "items": [{ 
      "id": "LI-CHL1234", 
      "name": "Chandelier", 
      "imgURL": "https://s3-us-west-2.amazonaws.com/app.tiktok/appliance/thumbs/light/chandelier.jpg", 
      "capImgURL": "", 
      "inUsed": false, 
      "editable": true, 
      "quantity": { 
       "number": 1, 
       "multiple": false 
      }, 
      "value": { 
       "state": "OFF", 
       "range": { 
        "minVal": "0", 
        "currentVal": "20", 
        "maxVal": "100" 
       } 
      }, 
      "rooms": [] 
     }, { 
      "id": "LI-PL1234", 
      "name": "Pendant light", 
      "imgURL": "https://s3-us-west-2.amazonaws.com/app.tiktok/appliance/thumbs/light/pendantlight.jpg", 
      "capImgURL": "", 
      "inUsed": false, 
      "editable": true, 
      "quantity": { 
       "number": 1, 
       "multiple": false 
      }, 
      "value": { 
       "state": "OFF", 
       "range": { 
        "minVal": "0", 
        "currentVal": "20", 
        "maxVal": "100" 
       } 
      }, 
      "rooms": [] 
     }] 
    }] 
} 

所有我想要的是得到collection.items

特定文件我已經嘗試此查詢至今:

db.myappliance.find(
    { 
     "applianceType": "light" 
    }, 
    { 
     "collection" : { 
      $elemMatch: { 
       "category" : "ceiling_light", 
       "items": { 
        $elemMatch: { 
         "id": "LI-CHL1234" 
        } 
       } 
      } 
     } 
    } 
) 

該查詢給了我所有內收集的文件.items數組。但我只想要一個。我知道我的問題已經有很多重複的線程。但是我找不到適合我的案例的答案。

回答

0

query沒有辦法做到這一點。

從mongodb集合上的查詢中得到結果後,使用它來檢索想要的對象。

+0

我剛試過你的方法。讓我告訴你我做了什麼。我正在使用NodeJS驅動程序。 首先我查詢外部文檔,即集合對象。 (函數(docs){}){doc.findOne({「applianceType」:「light」},{「collection」:{$ elemMatch:{「category」:「ceiling_light」}}}}) .then ' 此文檔對象包含items數組。所以我做了這個 'var lightItemData = docs.collection [0]; (函數(docs2){}){0} {0} {0} {0} {0}項目ID:{LI electatch:{id:「LI-CHL1234」}}}) .then NodeJS拋出錯誤** lightItemData.findOne()**不是一個函數。 – somnathbm

+0

我的答案可能有點誤導。更新。 'docs'不是你可以使用mongodb查詢的東西。這是一個有效的JS對象。因此,只需使用'for'循環獲取想要的字段,或者如果您更喜歡功能性的方式,則可以進行過濾。 – yehe