第四章查询
- 章节名:第四章查询
1.find查询 指定返回的键db.users.find({限制条件}, {指定返还的键})
db.users.find({'_id': 1}, {"username": 1, "email": 1})2.查询条件 '$lt' 对应 < '$lte' 对应 <= '$gt' 对应 > '$gte' 对应 >= "或"条件 (1)$in 单一键如果有多个值与其匹配,需要使用$in加一个条件数组
db.raffle.find({"ticket_no": {'$in': [725, 542, 390]}})(2)$nin 如果单一键与多个值不匹配,需要使用$nin加一个条件数组
db.raffle.find({"ticket_no": {'$nin': [725, 542, 390]}})(3)$or 多个键作为或的条件
db.raffle.find({'$or': {"ticket_no": 725, "winner":true}})"非"条件 $not 可以用在任何其他条件之上 "与"条件
db.raffle.find( {"ticket_no": 725, "winner":true})3.对于特定类型的查询 (1)null 会匹配值为null和不存在的键 如果需要仅返回值null的文档,还需要加入对键是否存在的判定
db.c.find({'z': {'$in': [null], '$exist': true}})(2)正则表达式查询 查询忽略大小写:
db.users.find({'name': /joe/i})(3)查询数组 $all 使多个元素来匹配数组 比如查询food集合中fruit中包含apple和banana的所有文档
db.food.find({'fruit': {$all: ['apple', 'banana']}})查询数组制定位置的元素,需要使用key.index语法指定下标
db.food.find({'fruit.2': 'peach'})index从0开始 $size 可以用来查询指定长度的数组 比如查询fruit键长度为3的文档
db.food.find({'fruit': {'$size': 3}})db.food.update({"$push": {"fruit": "strawberry"}, "$inc": {"size": 1}})$slice 返回数组的一个子集和 比如返回前10条评论
db.blog.posts.findOne(criteria, {"comments": {"$slice": 10}})比如返回后10条评论
db.blog.posts.findOne(criteria, {"comments": {"$slice": -10}})返回偏移量和数量之间的评论
db.blog.posts.findOne(criteria, {"comments": {"$slice": [23, 10]}})(4)查询内嵌文档 顺序相关
db.people.find({'name': {'first': 'Joe', 'last': 'Schmoe'}})顺序无关
db.people.find({'name.first': 'Joe', 'name.last':'Schmoe'})使用$elemMatch将限定条件分组,仅当需要对一个内嵌文档的多个键操作时使用 4.$where 比较两个文档的键是否相等
db.foo.find({'$where': function() { for (var current in this){ for (var other in this){ if (current != other && this[current] == this[other]) { return true } } } }});5.游标 limit 限制返回结果的数量 skip 略过然后返回余下的文档 sort 排序 不使用skip对结果分页 高级查询选项 $maxscan : intger 指定查询最多扫描的文档数 $min : document 查询的开始条件 $max : document 查询的结束条件 $hint : document 指定查询使用特定的索引 $explain boolean 获取查询执行的细节 $snapshot boolean 确保查询结果是在查询执行那一刻的一致快照
说明 · · · · · ·
表示其中内容是对原文的摘抄