MongoDB 读取文档
来源:互联网 发布:网络男歌手的伤感歌曲 编辑:程序博客网 时间:2024/06/05 14:32
空的查询文档将匹配集合的全部内容:
db.test.find({})
可以向查询文档中添加多个键值对,将多个查询条件组合在一起:
查找年龄在[20, 30]范围内的用户:
"$in"非常灵活,可以指定不同类型的键和值
假设有id范围为[1,12]的用户,返回不等于能被5整除余1的用户id:
返回仅仅匹配键值为null的文档:
$all: 通过多个元素来匹配数组
找到既有apple又有banana的文档:
例如下面查询就不能找到上面新插入的文档
db.food.find({"fruit": ["apple", "banana"]})
查询数组特定位置的元素,可以使用key.index语法指定下标
db.food.find({"fruit.2": "peach"})
db.test.find({})
可以向查询文档中添加多个键值对,将多个查询条件组合在一起:
db.users.find( {"age": 20, "gender": "male"} )
指定需要返回的键
可以通过find(或者findOne)的第二个参数来指定想要返回的键:db.test.find( {}, {"url": 1, "pageviews": 1, "_id": 0} // 默认情况下"_id"键总是被返回 )
查询条件
"$lt", "$lte", "$gt", "$gte"就是全部的比较操作符,分别对应<, <=, >, >=。可以将其组合起来以便查找一个范围的值。查找年龄在[20, 30]范围内的用户:
db.users.find( {"age": {"$gte": 20, "lte": 30}} )对于文档的键值不等于某个特定值的情况,需要使用条件操作符"$ne",它表示!=
OR查询
MongoDB有两种方式进行OR查询:"$in"可以用来查询一个键的多个值,"$or"可以在多个键中查询任意的给定值"$in"非常灵活,可以指定不同类型的键和值
db.users.find( {"user_id": {"$in": [12345, "joe"]}} )要是"$in"对应的数组只有一个值,那和直接匹配这个值效果一样
db.users.find( {"user_id": {"$in": ["joe"]}} // == {"user_id": "joe"} )"$or"接受一个包含所有可能条件的数组作为参数,OR型查询第一个条件应该尽可能多的匹配更多的文档,这样才最高效
db.raffle.find( {"$or": [ {"ticket_no": {"$in": [451, 623, 985]}}, {"winner": true} ]} )
$not
"$not"操作是元条件句,即可以用在任何其他条件之上。拿取模运算"$mod"来说,"$mod"会将查询的值除以第一个给定值,若余数等于第二个给定值则匹配成功假设有id范围为[1,12]的用户,返回不等于能被5整除余1的用户id:
db.users.find( {"id_number": {"$not": {"$mod": [5, 1]}}} )
条件语义
基本情况下,条件语句是内层文档的键,而修改器则是外层文档的键。有一些元操也位于外层文档中,比如"$and", "$or", "nor"。一个键可以有任何多个条件,但是一个键不能对应多个更新修改器。
特定类型的查询
null
null不仅会匹配某个键的值为null的文档,而且还会匹配不包含这个键的文档返回仅仅匹配键值为null的文档:
db.test.find( {"url": {"$in": [null], "$exists": true}} )
正则表达式
正则表达式能灵活有效地匹配字符串。系统可以接受正则表达式标志(i),但并不是一定要有。正则表达式也可以匹配到自身,虽然几乎没有人直接将正则表达式插入到数据库中。db.test.insert({"bar": /foo/}) db.test.find({"bar": /foo/})MongoDB可以为前缀型正则表达式(比如: /^zhang/)查询创建索引,所以这种类型的查询会非常高效
查询数组
db.food.insert({"fruit": ["apple", "banana", "peach"]}) 查询:db.food.find({"fruit": "banana"})会成功匹配到该文档$all: 通过多个元素来匹配数组
找到既有apple又有banana的文档:
db.food.find( {"fruit": {"$all": ["apple", "banana"]}} )也可以使用整个数组进行精确匹配,但是,精确匹配对于缺少元素或者元素冗余的情况失灵
例如下面查询就不能找到上面新插入的文档
db.food.find({"fruit": ["apple", "banana"]})
查询数组特定位置的元素,可以使用key.index语法指定下标
db.food.find({"fruit.2": "peach"})
$slice:前面提及,find的第二个参数是可选的,可以指定需要返回的键。而$slice操作符可以返回某个键匹配的数组元素的一个子集,使用$slice将返回文档中的所有键,即便你并没有显示地出现在键的说明符中
返回某篇博客评论的前10条:
返回某篇博客评论的24~33个元素:
返回所有博客下zhangsan的第一条评论:
先看一个示例(假设有如下所示的文档):
{"x": 5}
{"x": 15}
{"x": 25}
{"x": [5, 25]}
如果希望找到"x"键的值位于10和20之间的所有文档,直接想到的查询方式:db.test.find({"x": {"gt": 10, "$lt":20}}),希望返回的文档是{"x": 15},但是实际上它返回了两个文档:{"x": 15}和{"x": [5, 25]}, why?因为25与查询条件中的第一条语句(大于10)相匹配,5与查询条件中的第二个语句(小于20)相匹配。
解决这种问题的方法:
预期返回:{"x": 15}
使用方法:db.test.find({"x": {"$gt": 10, "$lt": 20}}).min({"x": 10}).max({"x": 20})
使用条件:需在当前查询字段创建过索引,但是在索引范围内对数组使用"gt"/"lt"查询,效率非常低。
预期返回:{"x": [5, 25]}
使用方法:db.test.find({"x": {"$elemMatch": {"$gt": 10, "$lt": 20}}})
温馨贴士:"elemMatch"要求MongoDB同时使用查询条件中的两个语句与一个数组元素进行比较,而且,"elemMatch"不会匹配非数组元素
返回某篇博客评论的前10条:
db.blog.findOne( criteria, {"comments": {"$slice": 10}} )$slice也可以指定偏移值以及希望返回的元素数量,来返回元素集合中间位置的某些结果
返回某篇博客评论的24~33个元素:
db.blog.findOne( criteria, {"comments": {"$slice": [23, 10]}} //[偏移量(从24开始), 总个数] )返回一个匹配的数组元素
返回所有博客下zhangsan的第一条评论:
db.blog.find( {"comments.name": "zhangsan"}, {"comments.$": 1} )数组和范围查询的相互作用
先看一个示例(假设有如下所示的文档):
{"x": 5}
{"x": 15}
{"x": 25}
{"x": [5, 25]}
如果希望找到"x"键的值位于10和20之间的所有文档,直接想到的查询方式:db.test.find({"x": {"gt": 10, "$lt":20}}),希望返回的文档是{"x": 15},但是实际上它返回了两个文档:{"x": 15}和{"x": [5, 25]}, why?因为25与查询条件中的第一条语句(大于10)相匹配,5与查询条件中的第二个语句(小于20)相匹配。
解决这种问题的方法:
预期返回:{"x": 15}
使用方法:db.test.find({"x": {"$gt": 10, "$lt": 20}}).min({"x": 10}).max({"x": 20})
使用条件:需在当前查询字段创建过索引,但是在索引范围内对数组使用"gt"/"lt"查询,效率非常低。
预期返回:{"x": [5, 25]}
使用方法:db.test.find({"x": {"$elemMatch": {"$gt": 10, "$lt": 20}}})
温馨贴士:"elemMatch"要求MongoDB同时使用查询条件中的两个语句与一个数组元素进行比较,而且,"elemMatch"不会匹配非数组元素
查询内嵌文档
查询整个文档(精确匹配,如果文档中name键下新增字段,则匹配失败,而且这种查询还是与顺序相关的)
查询joe发表5分好评的博客:
查询整个文档(精确匹配,如果文档中name键下新增字段,则匹配失败,而且这种查询还是与顺序相关的)
db.users.find( {"name": {"first": "joe", "last": "schmoe"}} )只针对键/值对进行查询(对于文档中包含"."的键[例如:URL],点表示法会有局限性,一种解决办法是在插入前或者提取后执行一个全局替换,将"."替换成一个URL中非法字符)
db.users.find( {"name.first": "joe", "name.last": "schmoe"} )$elemMatch:在查询条件中部分指定匹配数组中的单个内嵌文档。$elemMatch将限定条件进行分组,仅当需要对一个内嵌文档的多个键进行操作时才会用到
查询joe发表5分好评的博客:
db.blog.find( {"comments": {"$elemMatch": { "author": "joe", "score": {"$gte": 5} }}} )
0 0
- MongoDB 读取文档
- Mongodb存储读取Word文档
- MongoDB文档
- mongodb文档
- MongoDB文档
- MongoDB文档翻译-引言-文档
- MongoDB数据库文档说明
- 文档型数据库Mongodb
- MongoDB 速查文档
- mongodb 官方文档
- mongodb文档型数据库
- MongoDB数据库文档大全
- Mongodb安装文档
- MongoDB学习文档
- mongoDB之update文档
- mongoDB基础文档
- mongodb 子文档查询
- MongoDb学习文档
- Unity多个场景叠加或大场景处理方法小结
- spring事务的传播行为与隔离级别
- NDK 开发
- 如何取得所在城市名
- qt编程小技巧
- MongoDB 读取文档
- 黑马程序员—-C语言入门十重奏之三相悉
- Fire Net HDU杭电1045【DFS】
- mybatis自动生成mapper,dao,映射文件
- Android SQL基础入门
- 解析xml文件
- 华为OJ(字符串通配符)
- hdoj 4786 Fibonacci Tree 【最小生成树&&最大生成树】
- 字符串反转