我有以下格式的数据结构:
{
topAttribute: {
subAttribute:
[
{ eventType: "SPECIAL", date: "20121231" }
{ eventType: "NOTSPECIAL", date: "20131012" }
{ eventType: "NOTSPECIAL", date: "20131122" }
...
]
}
}
我试图识别eventType为' SPECIAL'的记录。并且日期为' 20121231"。我尝试使用以下多键样式查询来完成此任务:
Mongoid:
Item.where('topAttribute.subAttribute.eventType' => 'SPECIAL').and('topAttribute.subAttribute.date' => '20121231').all
MongoDB的:
db.items.find( { 'topAttribute.subAttribute.eventType': 'SPECIAL', 'topAttribute.subAttribute.date': '20121231'} )
但是,当我运行此查询时,它会找到 记录,其eventType为' SPECIAL' OR 记录日期为' 20121231'。这不是我想要的结果。
我如何重新构建此查询 - 或使用其他搜索/聚合策略 - 仅显示eventType为' SPECIAL'的记录。 AND 记录日期为' 20121231',并排除所有其他记录?
答案 0 :(得分:1)
如果要查找包含满足所有字段的数组元素的文档,则需要使用$elemMatch运算符。
db.items.find(
{ 'topAttribute.subAttribute' : {
$elemMatch: {
'eventType': 'SPECIAL',
'date': '20121231'
}
}
);