1 find
find({查询条件},{"key":1,"email":1}) 后面表示返回哪些键
2 可用的比较操作符
$lt , $lte,$gt,$gte
比如db.users.find({"age":{"$gte":18,"$lte":30}})
3不等于
find(...{"key":{"$ne":"value"}}
4 in
find(...{"key":{"$in":[1,2,3]}}
5 nin
find(...{"key":{"$nin":[1,2,3]}}
6 or
find( {"$or":[ {"key1":"value1"}, {"key2":"value2"} ]})
find( {"$or":[ {"key1": {"$in":["value1","value2"]} }, {"key2":"value2"} ]})
7$mod
find({"key": {"$mod":[5,1]}})
8 not
find({"key":{"$not":{"$mod":[5,1]}}})
9 and
find({"$and":[{"x":{"$lt":1}}, {"x":4}]})
这个匹配{"x"[0,4]}
等同于 find({"x":{"$lt":1,"$in":[4]}})
10 关于null
find( {"y": null } )---不仅会找到y:null的文档,还会找到不存在此字段的文档。
可以使用
find( {"z": {"$in" : [null],"$exists":true}})
11 查询使用正则表达式 ---PCRE
查询名为Joe或者joe
find({"name": /joe/i})
find({"name": /joe?/i})
find({"name": /^joe/})
12 查询数组
find({"fruit":"value1"}) 也就是数组中包含value1就可以搜到!
13数组中包含多个
find( {"fruit": {"$all":["value1","value2"]}}
也就是数组既包含value1又包含value2
14精确匹配
find({"fruit":【"value1","value2"]})
数组包含且仅仅包含这2个值才可以!
15数组的序号查询
find({"fruit.2":"peach"})
16$size
find({"fruit":{"$size":3}})
17$slice
findOne(criteria,{"comments":{"$slice":10}})
返回前10条评论!
findOne(criteria,{"comments":{"$slice":-10}})
返回后10条评论!
findOne(criteria,{"comments":{"$slice":【23,10】}})
跳过23个元素,尽可能返回10个元素!
注意,只能对comments进行控制,其它字段仍然返回!
18 $
模式:
comments:[{name:bob,email:xxx}, ................]
find({"comments.name":"bob"},{"comments.$":1})
返回第一个匹配的文档。
19 数组的查询
{"x": {"$gt" : 10,"$lt":20}}
如果此时x是一个数组,则任何一个元素满足其中1个条件就可以认为匹配!
但是如果不是一个数组,则进行同时匹配!
20$elemMatch
首先,只会针对数组元素进行匹配
find({"x":{"$elemMatch":{"$gt":10,"$lt":20}})
21如果创建了索引
find({"x": {"$gt" : 10,"$lt":20}}).min({"x":10}).max({"x":20})
效果非常好!因为不是扫描所有索引,而是在部分索引里进行扫描!
22 查询内嵌文档
find({"name":{"first":"joe","last":"schmoe"}})---精确匹配!
悲剧的是,这种查询还是顺序相关的!!!
注意:对于内嵌文档,这种查询都是精确匹配,必须用下面的方式!
23 更好的做法
find({"name.first“:"joe", "name.last":"schmoe"})
难道是or的关系???
24 请参考$elemMatch的方法!
25终极必杀技-where
----------------关于游标
每次取100条或者4MB,取较小的一个。
find().skip(3).limit(10).sort({"key1":1,"key2":-1})._addSpecial("$maxscan",20)
._addSpecial("$min",20)
._addSpecial("$max",20)
._addSpecial("$showDiskLoc":true)
.snapShot()---会让查询变慢!
备注:可以在启动mongod时指定--noscripting,关闭js的运行!---关闭服务器端脚本!
MongoDB权威指南学习笔记4---查询相关的知识点