MongoDB(四):查询

本文深入探讨MongoDB的find函数及其高级查询应用,包括基本查询、条件查询、特定类型查询和游标使用。通过具体示例,详细解释了比较操作符、OR查询、NOT查询及数组查询的实现方式。同时介绍了如何优化查询以减少数据传输量和提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.find简介

MongoDB使用find来进行查询。find的第一个参数决定了要返回哪些文档,其形式也是一个文档,说明要执行的查询细节。第二个参数指定要返回的键。指定返回的键既能节省传输的数据量,又能节省客户端解码文档的时间和内存消耗。看例子:
> db.c.find()    //将返回集合c中的所有内容。空洞查询文档{}会匹配集合的全部内容,若不指定查询文档,默认就是{}
> db.users.find({"age": 27})
> db.users.find({"age": 27}, {"username": 1})
注意事项:数据库所关心的查询文档必须是常量,也就是不能引用文档中其他键的值。
> db.stock.find("in_stock": "this.num_sold")    //不可行

二.查询条件

1.比较操作符
"$lt"、"$lte"、"$gt"和"$gte"分别对应<、<=、>和>=。看例子:
> db.users.find({"age": {"$gte": 20, "$lte": 50}})
2.OR查询
有两种OR查询的方式。"$in"可以用查询一个键的多个值。"$or"更通用一些,用来完成多个键值的任意给定值。看例子:
> db.raffle.find({"ticket_no": {"$in": [723, 434, 594]}})
> db.raffle.find({"$or": [{"ticket_no": 723}, {"winner": true}]})
3.$not
"$not"是元条件句,可以用在任何其他条件上。如:"$mod"会将查询的值除以第一个给定值,若余数等于第二个给定值则返回该结果。
> db.users.find({"id_num": {"$mod": [5, 1]}})
上面查询会返回"id_num"值为1、6、11等的用户。若想返回"id_num"为2、3、4、5、6等的用户,就要用"$not"了:
> db.users.find({"id_num": {"$not": {"$mod": [5, 1]}}})

三.特定于类型的查询

1.null
null不仅仅匹配自身,而且匹配“不存在的”。如果仅仅想匹配键值为null的文档,既要检查该键的值是否为null,还要通过"$exists"条件判定键值是否已存在:
> db.c.find({"z": {"$in": [null], "$exists": true}})
2.正则表达式
看例子:
> db.users.find({"name": /joe/i})
3.查询数组
数组绝大多数情况下可以这样理解:每一个元素都是整个键的值。例如,如果数组是一个水果清单,比如下面这样:
> db.food.insert({"fruit": ["apple", "banana", "peach"]})
查询:
> db.food.find({"fruit": "banana"})
会成功匹配给文档。

四.游标

基本使用:
> var cursor = db.people.find();
> while(cursor.hasNext()) {
... obj = cursor.next();
... }



转载于:https://my.oschina.net/ckanner/blog/87639

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值