前面详细说明了数组的操作,总结起来差不多就两种情况,一个条件中不带$elemMatch,一种是条件中带$elemMatch。常用的查询应该是带$elemMatch,这样是要求数组中有元素满足所有条件。
1. 不带$elemMatch,结构大概是:
{字段: 值} {字段: {$gt: 值}} 对应基本数据类型的数组
{字段.字段: 值} {字段.字段: {$gt: 值}} 对应文档类型的数组
2. 带$elemMatch , 结构大概是:
{字段: {$elemMatch: 值} } {字段: {$elemMatch: {$gt: 值}} } 对应基本数据类型的数组
{字段: {$elemMatch : {字段: 值}}} {字段: {$elemMatch : {字段: {$gt: 值}}}} 对应文档类型的数组
3. 带$elemMatch 并且要有多个满足
// 这两种等价 db.users.find( {"$and" : [ { finished: { $elemMatch: { $lte: 70 } } }, { finished: { $elemMatch: { $gt: 14 } } } ]} ) db.users.find( {"finished" : { "$all": [ { $elemMatch: { $lte: 70 } } , { $elemMatch: { $gt: 14 } } ]} } ) // 这两种等价 db.users.find( {"$and" : [ { points: { $elemMatch: { points: { $lte: 70}, bonus: 20 } } }, { points: { $elemMatch: { points: { $gt: 80}, bonus: 8 } } } ]} ) db.users.find( { "points" : {"$all" : [ { $elemMatch: { points: { $lte: 70}, bonus: 20 } }, { $elemMatch: { points: { $gt: 80}, bonus: 8 } } ]}} )