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