mongo 对数组元素查询
MongoDB中根据数组子元素进行匹配,有两种方式:
使用 “[数组名].[子元素字段名]” 的方式进行匹配。
使用 “[数组名]” $elemMatch { [子元素字段名] }的方式。
/* 1 */
{
"_id" : "123",
"name" : "人文医学",
"qList" : [
{
"qid" : 1,
"content" : "医学伦理学的公正原则",
"reorderFlag" : 1
},
{
"qid" : 2,
"content" : "制定有关人体实验的基本原则",
"reorderFlag" : 0
}
]
},
/* 2 */
{
"_id" : "124",
"name" : "人文医学2",
"qList" : [
{
"qid" : 1,
"content" : "医学伦理学的公正原则",
"reorderFlag" : 0
},
{
"qid" : 2,
"content" : "制定有关人体实验的基本原则",
"reorderFlag" : 1
}
]
}
目标:查询数组qList中qid为1,reorderFlag为0的记录
1、使用:[数组名]” $elemMatch { [子元素字段名] }的方式
db.test1.find({
"qList"{$elemMatch: {"qid": 1, "reorderFlag": 0}} // 同一数组内,多条件匹配,两个条件为与的关系
})
查询结果:
{
"_id" : "124",
"name" : "人文医学2",
"qList" : [
{
"qid" : 1,
"content" : "医学伦理学的公正原则",
"reorderFlag" : 0
},
{
"qid" : 2,
"content" : "制定有关人体实验的基本原则",
"reorderFlag" : 1
}
]
}
2、使用:[数组名].[子元素字段名]” 的方式
db.test1.find({
"qList.qid": 1, "qList.reorderFlag": 0 //两个条件为或的关系
})
查询结果:
/* 1 */
{
"_id" : "123",
"name" : "人文医学",
"qList" : [
{
"qid" : 1,
"content" : "医学伦理学的公正原则",
"reorderFlag" : 1
},
{
"qid" : 2,
"content" : "制定有关人体实验的基本原则",
"reorderFlag" : 0
}
]
},
/* 2 */
{
"_id" : "124",
"name" : "人文医学2",
"qList" : [
{
"qid" : 1,
"content" : "医学伦理学的公正原则",
"reorderFlag" : 0
},
{
"qid" : 2,
"content" : "制定有关人体实验的基本原则",
"reorderFlag" : 1
}
]
}