首先,为了方便demo,我们需要创建包含数组和嵌套数组的文档
db.accounts.insert([
{
name: "spring",
balance: 8787,
contact: ["China","Java","FrameWork"]
},
{
name: "mysql",
balance: 8,
contact: [ ["oracle"],"database","8.0" ]
},
{
name: "java",
balance: 8,
contact: [ ["oracle"],"core","8.0" ]
}
])
数组操作符
$all
语法结构
匹配数组字段中包含的所有查询值的文档
{ : { $all: [ , ... ] } }
读取contact数组中包含China和Java的文档
db.accounts.find( { contact: { $all: ["China", "Java"] } } )
读取contact数组中包含oracle数组的文档
db.accounts.find( { contact: { $all: [ ["oracle"] ] } } )
$elemMatch
语法结构
匹配数组字段中至少存在一个值满足筛选条件的文档
{ : { $elemMatch: { , ... } } }
读取contact数组中大于7.0小于9.0的文档信息
db.accounts.find( { contact: {$elemMatch: { $lt: "9.0", $gt: "7.0" } } } )
联合$all进行使用,读取contact数组中包含oracle数组且数组中存在大于7.0小于9.0的数值的文档信息
db.accounts.find( {
contact: {
$elemMatch: {
$lt: "9.0",
$gt: "7.0"
},
$all: [ ["oracle"] ]
}
} )
联合$all进行使用,读取contact数组存在大于7.0小于9.0的数值,和存在大于9.0小于10.0的文档信息
db.accounts.find( {
contact: {
$all: [
{ $elemMatch: { $lt: "9.0", $gt: "7.0" } },
{ $elemMatch: { $lt: "10.0", $gt: "9.0" } },
]
}
} )