MongoDB的查找操作

MongoDB的查找操作

find() / find0ne()

格式:db.collection_name.find(query, field)

参数 功能
collection_name 要操作的数据名
query 筛选条件,相当于SQL中的where子句
field 显示的域, 0 表示显示, 1 表示不显示

1、field参数

db.py.find()   // select * from py
	{
		"_id" : ObjectId("5c886f51dda44c12743c3caa"),
		"model" : "mate20",
		"price" : 4988
	},
	
db.py.find({},{_id:0}})  // select model,price from py
// 查询结果不显示 _id 的域
	{
		"model" : "mate20",
		"price" : 4988
	},
	
db.py.find({},{_id:0,model:1}})   // select model from py
// 查询结果不显示 _id 的域 只显示 model 域
	{
		"model" : "mate20"
	},

注意:如果给某个域设置为1,则其他自动为0,两者不能混用,_id域特殊

db.py.find({},{model:1,price:0})   // 报错

2、 query参数

db.py.find({model:"mate20"},{_id:0})  
// select model,price from py where model="mate20"  
// 查询 model 为 mate20 的文档
	{
		"model" : "mate20",
		"price" : 4988
	},

db.py.find({model:"mate20",price:2888},{_id:0})  
// select model,price from py where model="mate20" and price=2888
// 查询 model 为 mate20 且 price 为 2888 的文档
	{
		"model" : "mate20",
		"price" : 2888
	},

3、比较运算符

符号 功能
$eq 等于 =
$lt 小于 <
$lte 小于等于 <=
$gt 大于 >
$gte 大于 >=
$ne 不等于 !=
$in 包含
$nin 不包含
db.py.find({price:{$eq:2888}},{_id:0})  // 查找 price 等于 2888 的文档
db.py.find({price:{$lt:3000}},{_id:0})  // 查找 price 小于 3000 的文档
db.py.find({price:{$lte:3000}},{_id:0})  // 查找 price 小于等于 3000 的文档
db.py.find({price:{$in:[2888,4888]}},{_id:0}) // 查找 price 是 2888或4888 的文档

4、逻辑操作符

符号 功能
$and
$or
$not
$nor 既不也不
db.py.find({$and:[{model:"mate20"},{price:4988}]},{_id:0})  
// 查找 model 为 mate20 且 price 为 4988 的文档
db.py.find({price:{$gt:1000,$lt:3000}},{_id:0})  
// 查找 price 在 1000 到 3000 之间的文档

db.py.find({$or:[{model:"mate20"},{price:2988}]},{_id:0}) 
// 查找 model 为 mate20 或 price 为 2988 的文档
db.py.find({$or:[{price:{$lt:3000}},{price:{$gt:4000}}]},{_id:0})
// 查找 price 小于 3000 或 大于 4000 的文档

db.py.find({price:{$not:{$eq:4988}}},{_id:0})
// 查找 price 不小于 4988 的文档

db.py.find({$nor:[{model:"mate20"},{price:2988}]},{_id:0}) 
// 查找 model 不为 mate20  price 也不为 2988 的文档

5、数组查找操作符

符号 功能
$all 查找数组中全部包含的文档
$size 根据数组的项数查找文档
$slice 显示数组中的前几项或切片显示数组的数据 { $slice:3 },{ $slice:[2,2] }
db.py.find({CPU:"4G"},{_id:0})  
// 查找 CPU 参数数组中为 4G 的文档

db.py.find({CPU:{$all:["QL970","4G"]}},{_id:0})  
// 查找 CPU 参数数组中为 QL970 且为 4G 的文档

db.py.find({CPU:{$size:3}},{_id:0})  
// 查找 CPU 参数中有 3项 的文档

db.py.find({},{_id:0CPU:{$slice:3}})  
// 查找显示CPU参数数组中的前 3 项
db.py.find({},{_id:0CPU:{$slice:[2,2]}})  
// 查找显示CPU参数数组中跳过前 2 项,再显示后两项

6、其他查找操作符

符号 功能
$exists 查找存在某个域的文档。true为显示存在该域的文档,false反之。
$mod 通过整除余数进行查找
$type 查找值为指定类型的文档 1
db.py.find({CPU:{$exists: true}},{_id:0})  
// 查找存在 CUP 这个域的文档

db.py.find({price:{$mod:[2,0]}},{_id:0})  
// 查找 price 的值 为偶数(被2除余0) 的文档

db.py.find({price:{$type:1}},{_id:0})  
// 查找 price 的值 类型为 double 的文档

db.py.find({},{_id:0CPU:{$slice:3}})  
// 查找显示CPU参数数组中的前 3 项
db.py.find({},{_id:0CPU:{$slice:[2,2]}})  
// 查找显示CPU参数数组中跳过前 2 项,再显示后两项

7、 find0ne()

查找符合查询条件的第一个文档,参数与 find() 的一样

8、 查询结果相关函数

函数名 功能
distinct() 查找某个域都有哪些值
pretty() 查询结果格式化显示
limit() 查询结果显示前几个文档
skip() 跳过前几个文档,显示后面的文档
count() 统计查询到的文档个数
sort() 按照指定的域进行排序
db.py.distinct("price")   // 查找所有price的值
db.py.find({},{_id:0}).pretty()  // 所有查询结果格式化显示
db.py.find({},{_id:0}).limit(2)  // 查询结果显示前两个文档
db.py.find({},{_id:0}).skip(2)  // 查询结果跳过前两个文档
db.py.find({},{_id:0}).count()  // 统计查询结果个数
db.py.find({},{_id:0}).sort({price:1})  // 查询结果按照price的升序排,-1为降序排
db.py.find({},{_id:0}).sort({price:1,model:1})  // 复合排序,price为第一排序项

  1. BSON类型对应的数字 参考文档 ↩︎

猜你喜欢

转载自blog.csdn.net/weixin_43883022/article/details/88530988