MongoDB文档查询
- 1、语法
- 2、对比语法
- 3、AND
- 4、OR
- 5、AND与OR联合
- 6、数据中查询
- 7、模糊查询
- 8、排序
- 9、分页
- 10、总条数
- 11、去重
- 12、指定返回字段
1、语法
> db.集合名称.find(query, projection)
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
> db.集合名称.find().pretty()
注意: pretty() 方法以格式化的方式来显示所有文档。
2、对比语法
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
先查询下collections中的数据
让数据友好显示:
db.users.find().pretty()
我们查询年龄为24的文档数据
db.users.find({age:24})
查询年龄小于29岁的数据
db.users.find({age:{$lt:29}})
查询年龄小于等于29岁的数据
db.users.find({age:{$lte:29}})
年龄>=29的结果和年龄不等于29的结果如下:
3、AND
> db.集合名称.find({key1:value1, key2:value2,...}).pretty()
类似于 WHERE 语句:WHERE key1=value1 AND key2=value2
查询name是不良人_0,年龄>24岁的数据:
db.users.find({$or:[{name:'不良人_0'},{age:{$gt:24}}]})
4、OR
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
> db.集合名称.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
类似于 WHERE 语句:WHERE key1=value1 or key2=value2
5、AND与OR联合
类似SQL语句为:'where age >50 AND (name = '编程不良人' OR name = 'MongoDB')'
> db.集合名称.find({"age": {$gt:50}, $or: [{"name": "编程不良人"},{"name": "MongoDB"}]}).pretty();
6、数据中查询
db.users.find({likes:'看电视xx'})
7、模糊查询
类似 SQL 中为 'where name like '%name%''
> db.users.find({likes:/良/});
注意:在 mongoDB 中使用正则表达式可以是实现近似模糊查询功能
8、排序
> db.集合名称.find().sort({name:1,age:1}),
- 1 升序 -1 降序
类似 SQL 语句为: 'order by name,age'
按年龄升序排列
db.users.find({}).sort({ age:1 })
按年龄降序排列
db.users.find({}).sort({ age:-1})
按照年龄降序,name升序
db.users.find({}).sort({ age:-1,name:1})
9、分页
> db.集合名称.find().sort({条件}).skip(start).limit(rows);
类似于 SQL 语句为: 'limit start,rows'
db.users.find({}).sort({ age:-1,name:1}).skip(0).limit(2)
db.users.find({}).sort({ age:-1,name:1}).skip(2).limit(2)
10、总条数
> db.集合名称.count();
> db.集合名称.find({"name":"编程不良人"}).count();
类似于 SQL 语句为: 'select count(id) from ....'
db.orders.find().count()
11、去重
> db.集合名称.distinct('字段')
类似于 SQL 语句为: 'select distinct name from ....'
db.users.distinct('age')
12、指定返回字段
> db.集合名称.find({条件},{name:1,age:1})
- 参数2: 1 返回 0 不返回 `注意:1和0不能同时使用`
只返回name字段(_id是默认自带的)
db.users.find({},{name:1})
只返回name,不要_id,这个是个特殊,除此之外,0和1不可以同时使用
db.users.find({},{_id:0,name:1})
0和1同时使用会报错:不要age字段,只要name字段
上面这些操作都很简单,我只是挑了一些初级的操作,更复杂的查询操作和API请参考官网