MongoDB自学笔记10---4.2查询文档(三)

2014-11-24 17:08:24 · 作者: · 浏览: 2
时候如果第一个条件不满足,就会短路不在继续执行了。

> db.user.find()

{ "_id" : 1, "name" : "user1","age" : 1 }

{ "_id" : 2, "name" : "user2","age" : 2 }

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 6 }

{ "_id" : 7, "name" : "user7","age" : 7 }

{ "_id" : 8, "name" : "user8","age" : 8 }

{ "_id" : 9, "name" : "user9","age" : 9 }

{ "_id" : 10, "name" : "user10","age" : 10 }

> db.user.find({$and:[{name:"user1"},{age:2}]})

> db.user.find({$and:[{name:"user1"},{age:1}]})

{ "_id" : 1, "name" : "user1","age" : 1 }

$and一般都可以转换成为普通的查询,例如上面的完全可以转换为:

db.user.find({name:”user1”,age:1})

既然都可以转换为不适用$and的方法查询,那为何还需要使用and呢?因为使用简单方法查询如果条件太多的话或者结合其他选择器的时候比较混乱,使用$and会比较清晰。

$not

语法:{ field: {$not: { } } }

查找不匹配所给定查询表达式的文档。

> db.user.find()

{ "_id" : 1, "name" : "user1","age" : 1 }

{ "_id" : 2, "name" : "user2","age" : 2 }

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 6 }

{ "_id" : 7, "name" : "user7","age" : 7 }

{ "_id" : 8, "name" : "user8","age" : 8 }

{ "_id" : 9, "name" : "user9","age" : 9 }

{ "_id" : 10, "name" : "user10","age" : 10 }

> db.user.find({age:{$not:{$gt:5}}}) /*查找age不大于5的文档*/

{ "_id" : 1, "name" : "user1","age" : 1 }

{ "_id" : 2, "name" : "user2","age" : 2 }

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

$or

语法:{ $or: [ { }, { }, ... , { } ]}

查找满足表达式数组其中一个的文档。

> db.user.find()

{ "_id" : 1, "name" : "user1","age" : 1 }

{ "_id" : 2, "name" : "user2","age" : 2 }

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 6 }

{ "_id" : 7, "name" : "user7","age" : 7 }

{ "_id" : 8, "name" : "user8","age" : 8 }

{ "_id" : 9, "name" : "user9","age" : 9 }

{ "_id" : 10, "name" : "user10","age" : 10 }

> db.user.find({$or:[{name:"user1"},{age:10}]}) /*查找name为user1,或者age为10的文档*/

{ "_id" : 1, "name" : "user1","age" : 1 }

{ "_id" : 10, "name" : "user10","age" : 10 }

$nor

语法:{ $nor: [{ }, { }, ... { } ] }

查找不满足给定表达式数组中任意表达式的文档。

> db.user.find()

{ "_id" : 1, "name" : "user1","age" : 1 }

{ "_id" : 2, "name" : "user2","age" : 2 }

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 6 }

{ "_id" : 7, "name" : "user7","age" : 7 }

{ "_id" : 8, "name" : "user8","age" : 8 }

{ "_id" : 9, "name" : "user9","age" : 9 }

{ "_id" : 10, "name" : "user10","age" : 10 }

> db.user.find({$nor:[{name:"user1"},{age:10}]}) /*查找name不为user1或者age不是10的数组*/

{ "_id" : 2, "name" : "user2","age" : 2 }

{ "_id" : 3, "name" : "user3","age" : 3 }

{ "_id" : 4, "name" : "user4","age" : 4 }

{ "_id" : 5, "name" : "user5","age" : 5 }

{ "_id" : 6, "name" : "user6","age" : 6 }

{ "_id" : 7, "name" : "user7","age" : 7 }

{ "_id" : 8, "name" : "user8","age" : 8 }

{ "_id" : 9, "name" : "user9","age" : 9 }

元素选择器(Element)

在mongodb的文档中叫做Element,翻译成元素选择器总是感觉有点别扭,但是也没有找到更好的。

此类选择器包括$exists、$mod、$type。

$exists

语法:{ field: {$exists: } }

查找是否存在某字段的文档。True表示存在,false表示不存在。

> db.c2.find()

{ "_id" : 1, "name" : "yue" }

{ "_id" : 2, "age" : 2 }

> db.c2.find({name:{$exists:1}}) /*查找存在name字段的文档*/

{ "_id" : 1, "name" : "yue" }

> db.c2.find({name:{$exists:0}}) /*查找不存在age字段的文档*/

{ "_id" : 2, "age" : 2 }

$mod

语法:{ field: {$mod: [ divisor, remainder ]} }

选取某字段满足模取运算的文档。该字段的值必须为数字,否则查不到结果。

> db.c2.find()

{ "_id" : 1, "name