Arrays MongoDB数组查询-选择一个数组元素
我在查询包含数组的MongoDB集合时遇到问题。Arrays MongoDB数组查询-选择一个数组元素,arrays,mongodb,Arrays,Mongodb,我在查询包含数组的MongoDB集合时遇到问题。 这是我要查询的集合的结构。这是一个记录: { “_id”:“abc123def4567890”, “配置文件id”:“abc123def4567890”, “图像计数”:2, “图像”:[ { “图像id”:“ABC123456789”, “image_url”:“images/something.jpg”, “地理位置”:“-0.1234,11.234567890”, “头衔”:“头衔”, “拍摄时间”:“01:23:33”, “拍摄日期”:“
这是我要查询的集合的结构。这是一个记录:
{
“_id”:“abc123def4567890”,
“配置文件id”:“abc123def4567890”,
“图像计数”:2,
“图像”:[
{
“图像id”:“ABC123456789”,
“image_url”:“images/something.jpg”,
“地理位置”:“-0.1234,11.234567890”,
“头衔”:“头衔”,
“拍摄时间”:“01:23:33”,
“拍摄日期”:“2222年11月22日”,
“镜头类型”:“风景”,
“条件”:“多云”,
“iso”:16,
“f”:2.4,
“ss”:“1/545”,
“焦点”:6.0,
“设备”:“,
“指示”:“,
“上传日期”:1234567890,
“更新日期”:1234567890
},
{
“图像id”:“ABC123456789”,
“image_url”:“images/something.jpg”,
“地理位置”:“-0.1234,11.234567890”,
“头衔”:“头衔”,
“拍摄时间”:“01:23:33”,
“拍摄日期”:“2222年11月22日”,
“快照类型”:“肖像”,
“条件”:“多云”,
“iso”:“16”,
“f”:“2.4”,
“ss”:“1/545”,
“焦点”:“6.0”,
“设备”:“,
“指示”:“,
“上传日期”:1234567890,
“更新日期”:1234567890
}
]
}
请原谅格式问题,我不知道该如何显示
如您所见,它是一个配置文件,在一个名为“images”的数组中包含一系列图像,共有2个图像。每个“图像”数组项都包含图像的属性对象(url、标题、类型等)
我只想返回属性与特定条件匹配的object元素:
从已拍摄的图像中选择对象\u type=“布景”
我试图让它尽可能简单,因此我从以下几点开始:
find( { "images.shot_type": "scenery" } )
这将返回整个记录以及其中的两个图像。因此,我尝试了投影,但无法在数组中隔离单个对象(在本例中,对象位于位置0)并返回它
我认为答案在于投射,但我不确定
我已经查阅了MongoDB文档好几个小时了,找不到灵感。我读过关于$elemMatch、$和其他数组运算符的文章,似乎没有任何内容允许您根据其中的数据挑出数组项。我已经浏览了这一页了,但仍然无法理解
您可以这样使用
$elemMatch
(简化查询):
db.collection.find({
“配置文件id”:“1”,
},
{
“图像”:{
“$elemMatch”:{
“放炮类型”:1
}
}
})
您可以将两个对象用于find
查询。第一个将过滤所有文档,并仅获取profile\u id
为1的文档。如果要搜索整个集合,可以省略此阶段并仅使用{}
。然后,另一个对象使用
$elemMatch
仅获取shot\u type
为1的元素
使用聚合检查示例:
db.collection.aggregate({
$project: {
_id: 0,
"result": {
$filter: {
input: "$images",
as: "img",
cond: {
$eq: [
"$$img.shot_type",
"scenery"
]
}
}
}
}
})
谢谢你。我需要更多地了解聚合。我想我可以用一个简单的“查找”来完成这个查询。我错了,不客气。mongo db提供免费课程。至少取一个@Phfog。需要1到2天的时间。学会使用
$match
和$project
和$unwind
几乎就足够了