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數組。但我只想要一個。我知道我的問題已經有很多重複的線程。但是我找不到適合我的案例的答案。
我剛試過你的方法。讓我告訴你我做了什麼。我正在使用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
我的答案可能有點誤導。更新。 'docs'不是你可以使用mongodb查詢的東西。這是一個有效的JS對象。因此,只需使用'for'循環獲取想要的字段,或者如果您更喜歡功能性的方式,則可以進行過濾。 – yehe