MongoDb--MongoDb之find上

####第一个参数#### MongoDB使用find来进行查询,查询呢,就是返回一个集合中文档的子集,子集合的范围从0个文档到整个集合。

find的第一个参数决定了要返回那些文档,其形式也就一个文档,说明了要执行的查询细节。

通常呢,大家看到的find查询基本都长这个样子

    db.user.find({})

    db.user.find({"name":"qianjiahao"})

    db.user.find({"name":"qianjiahao","email":"example@example.com"})

####第二个参数#### 但是,有的时候,我们并不希望将文档中的所有键/值对都返回,这时,我们可以在find方法的第二个参数上指明我们希望返回的信息。

db.user.find({},{"name":1,"email":1})

上面的语句意思是:我们只想得到name和email,其他的不关心。像这样指明返回信息的做法肯定是有好处的,它可以帮助我们节省传输的数据量,又能节省客户端解码文档的时间和内存消耗。 比如,现在有这两条数据

{ "_id" : ObjectId("5509087e08fa61313b5a8230"), "name" : "william", "email" : "example@example.com" }

{ "_id" : ObjectId("5509088b08fa61313b5a8231"), "name" : "jack", "email" : "example@example1.com" }

我们只想得到name,连 _id 都不想要,那么可以这样

    db.user.find({},{"name":1,"_id":0})

{ "name" : "william" }

{ "name" : "jack" }

####注意#### 数据库关心的查询文档的值,必须是常量(在你自己的代码里可以是正常的变量),换句话说,不可以引用文档中其他键的值!

###查询条件###

####$lt $lte $gt $gte#### 以上四个分别表示为:< 、 <= 、 > 、 >= 。 通常的做法是将他们组合起来,以便查找一个范围。 比如,查询年龄在18到25岁(含)的人,我们可以这样

db.user.find({"age":{"$gte":18,"$lte":25}})

这样的范围查询对查询日期特别有用 比如,查询在2015年1月1日后注册的用户

start = new Date("01/01/2015") db.user.find({"register":{"$gte":start}})

####注意#### 不要去匹配精确的日期,而是用范围来对日期进行查询

####$ne#### $ne表示不相等

db.user.find({"name":{"$ne":"william"}})

###OR查询### ####$in#### $in可以查询一个键的多个值 举例,每个人有爱好,假定为一个,数据太多,咱们用第二个参数来过滤一下

    db.user.find({},{"_id":0})

{ "hobby" : "swimming", "gender" : "female" }

{ "hobby" : "dancing", "gender" : "male" }

{ "hobby" : "singing", "gender" : "male" }

我们想查询喜欢dancing和swimming和的人,可以得到如下结果

    db.user.find({"hobby":{"$in":["dancing","swimming"]}},{"_id":0})

{ "hobby" : "swimming", "gender" : "female" }
{ "hobby" : "dancing", "gender" : "male" } 

若只查询会跳舞的人

    db.user.find({"hobby":{"$in":["dancing"]}},{"_id":0})

{ "hobby" : "dancing", "gender" : "male" }

既然$in,那么与之相对的就$nin,可以查询到不包括指明信息的文档

###$or#### 我们再添加一个游泳的人,并用$in查询游泳的人

    db.user.find({"hobby":{"$in":["swimming"]}},{"_id":0})

{ "hobby" : "swimming", "gender" : "female" }

{ "hobby" : "swimming", "gender" : "male" }

$in 是对单个键进行的查询,用$or查询可以匹配多个键

    db.user.find({"$or":[{"hobby":"swimming"},{"gender":"female"}]},{"_id":0})

{ "hobby" : "swimming", "gender" : "female" }
{ "hobby" : "swimming", "gender" : "male" } 现在,我们把查询条件的female改成male

    db.user.find({"$or":[{"hobby":"swimming"},{"gender":"male"}]},{"_id":0})

{ "hobby" : "swimming", "gender" : "female" }

{ "hobby" : "dancing", "gender" : "male" }

{ "hobby" : "singing", "gender" : "male" }

{ "hobby" : "singing", "gender" : "male" }

{ "hobby" : "dancing", "gender" : "male" }

{ "hobby" : "swimming", "gender" : "male" }

现在我们可以得出结论,OR查询($in 和 $or)是尽可能的获取更多的匹配项。 OR查询其实是取并集,满足其中一条及以上,即可被查询到。

####$not#### not 是元条件句,可以用于任何条件之上,意为取反

####注意#### 一个键不能对应多个更新修改器 但是可以对应多个条件查询句 比如,可以这样

db.user.find({"age":{"$gt":18,"$lt":30}})

但是,不可以这样

{"$inc":{"age":1},"$set":{"age":20}}

因为他们修改了两次age

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值