1 $and
1.1 语法
{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
说明
$and
操作符就是java中的&&,表示必须满足给定的所有条件。$and
操作符是短路操作,只要判断一个条件为false,后面都的都不会再计算。
1.2 示例
查询price
字段等于1.99并且price
字段存在的文档:
db.inventory.find( { $and: [ { price: { $ne: 1.99 } }, { price: { $exists: true } } ] } )
下面的写法等同于上面的写法:
db.inventory.find( { price: { $ne: 1.99, $exists: true } } )
备注: mongodb为每个逗号都提供了一个隐式的
$and
操作符,当单层逻辑的时候可以省略不写,但是多层逻辑嵌套的时候$and
操作符不可省略。
嵌套逻辑操作符:
下面查询查询符合以下条件的文档:
1. price
字段值等于0.99 or 1.99,并且
2. sale
字段值等于true或者qty
字段值小于20
db.inventory.find( {
$and : [
{ $or : [ { price : 0.99 }, { price : 1.99 } ] },
{ $or : [ { sale : true }, { qty : { $lt : 20 } } ] }
]
} )
2 $not
2.1 语法
{ field: { $not: { <operator-expression> } } }
说明
$not
操作符表示某个字段必须不满足给定的条件或者该字段不存在。
2.1 示例
查询price
字段值不大于1.99或不存在price
字段的文档
db.inventory.find( { price: { $not: { $gt: 1.99 } } } )
3 $nor
3.1 语法
{ $nor: [ { <expression1> }, { <expression2> }, ... { <expressionN> } ] }
说明
$nor
操作符的意思是给定的条件全部都不满足(包括字段不存在)
3.2 示例
查询price
字段不存在或者price
字段值不等于1.99 并且sale
字段不存在或者sale
字段值不等于true的文档
db.inventory.find( { $nor: [ { price: 1.99 }, { sale: true } ] } )
4 $or
4.1 语法
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
说明
$or
操作符的意思是给定的条件有一个满足即可$or
操作符可以嵌套
4.2 示例
查询quantity
字段小于20或price
字段等于10的文档
db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )
4.3 $or操作符索引操作
$or
操作符如果要走索引,则每个条件的每个字段都得有索引才能走索引,例如:
db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )
上面的查询quantity
字段和price
字段都必须有索引才能走索引查询。