MongoDB的查询

等值查询

1.返回集合的全部内容
db.test.find()

2.查询指定键值对文档
db.test.find({"filed1":value1,"filed2":value2})

##select * from aa where name="zhangsan";
db.aa.find({name:"zhangsan"}).forEach(printjson);

3.指定返回键
db.test.find({},{"username":1,"email":1})

##select class from aa where name="zhangsan";
db.aa.find({name:"zhangsan"},{class:true}).forEach(printjson);

4.指定不返回某键值
db.test.find({},{"username":1,"_id":0})

条件查询

  • 条件操作符
    • $gt :>
    • $gte: >=
    • $lte:<=
    • $lt :<
    • $ne: != (适用于所有类型数据,不局限于整型,也可以是字符串)
db.collection.find({ "field" : { $gt: value } } ); // 大于: field > value
db.collection.find({ "field" : { $lt: value } } ); // 小于: field < value
db.collection.find({ "field" : { $gte: value } } ); // 大于等于: field >= value
db.collection.find({ "field" : { $lte: value } } ); // 小于等于: field <= value
db.collection.find({ "field" : { $ne: value } } ); // 不等于: field != value
db.collection.find({ "field" : { $gt: value1, $lt: value2 } } ); // value1 < field < value

OR查询方法

  • $in可以用来查询一个键的多个值,和sql的in一样,但是可以指定不同的类型的条件和值
  • $or多个键值的任意给定值,常用
  • $nin不包含,不匹配,与$in相对
##查询学号为1,3,9的成绩
db.student.find({"user_id":{"$in":[1,3,9]}})

##不同类型包含查询
db.student.find({"user_id":{"$in":[1,3,"zhangsan"]}})

##查询科目为数学或者老师为张三的信息
db.student.find({"$or":[{"subject":math},{"teacher":"zhangsan"}]})

$not元条件句

  • 可以用在任何其他条件上
##返回用户id除数是5,余数是1
db.user.find({"user_id":{"$not":{"$mod":[5,1]}}})

exists的用法

##$exists判断字段是否存在
db.aa.find({"z":{"$in":[null],"exists":true}})

##查询所有存在age字段的记录
db.users.find({age: {$exists: true}});

##查询所有不存在name字段的记录
db.users.find({name: {$exists: false}});

正则表达式

##忽略大小写,查找所有名为zhangsan或者Zhangsan的用户 
db.users.find({"name":/zhangsan/i})

##查询不匹配name=b*开头的记录
db.users.find({name:{$not:/^b.*/}});

查询数组

  • $all匹配所有,类似sql条件中的in,但是in主需要满足其中某一个值,而$all必须满足[]的所有值
  • $size数据元素个数
##查询数据age数组中元素有16和18的文档
db.test.find({age:{$all:[16,18]}});

##指定数组位置,使用key.index,下表从0开始
db.test.find({"age.1":18})

##查询数组长度为3
db.test.find({"age":{"size":3}})

$slice返回数据组的一个子集合

##返回后10条评论
db.blog.posts.findOne(criteria,{"comments":{"$slice":-10}})

##分页返回类似SQL中limit m,n
db.blog.posts.findOne(criteria,{"comments":{"$slice":[10,5]}})

查询内嵌文档

  • 使用点"."方式查询内嵌文档信息
  • $elemMatch将限定条件进行分组,仅当需要对一个内嵌文档的多个键操作时才会用到
{
	"name":{
		"first":hong
		"last":Xiao
	},
	"age":18
}
##db.students.find({"name.first":"hong","name.last":"Xiao"})

##db.blog.find({"comments":{"$elemMatch":{"author":"zhangsan","score":{"$gte":5}}}})

JavaScript查询和$where查询

  • $where可以执行任意javascript作为查询的一部分
  • 不是非常必要的时候,一定要避免使用"$where"查询,非常影响性能。每个文档都要从bson转换成javascript对象,然后通过"$where"的表达式来运行,而且还不能利用索引
##下面两者等价 
db.test.find({"where":"this.x+this.y == 10"})
db.test.find({"where":"function() {return this.x+this.y == 10; }"})

##查询a大于3的数据下面的查询方法殊途同归
- db.c1.find( { a : { $gt: 3 } } );
- db.c1.find( { $where: "this.a > 3" } );
- db.c1.find("this.a > 3");
- f = function() { return this.a > 3; } db.c1.find(f);

Mongodb面向文档的nosql数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值