如果在mongodb中存在如下数据
{
audit:{
experts:[{expertId:"1",result:"success",......}
{expertId:"2",result:"success",......}
]
}
},
{
audit:{
experts:[{expertId:"1",result:"fail",......}
{expertId:"2",result:"success",......}
]
}
}
如果是 需要查询数组需要查询experts中的expert=1 并且 result=success,按照查询参数查询的结果应该只有第一个才符合条件。
如果你是这么写的{“audit.experts.expertId”:"1",“audit.experts.result”:"success"},那么会将两条数据都会查出来。
这就需要用到mongodb查询符号"$elemMatch"
"audit.experts" : {
"$elemMatch" : {
"expertId" : "1",
"result" : "success"
}
}
由于是嵌套了几层查询,所以当数据量很大时效率不高,这时需要创建一个联合索引
{“audit.experts.expertId”:1,“audit.experts.result”:1};
由于该索引mongodb默认不会被使用,所以需要使用hint方法来强制其使用索引。
没有调用索引和使用索引效率相差百倍!!!