英特尔至强系列处理器发布计划曝光
2013-03-22 15:51
363 查看
MongoDB使用find来查询,不指定任何参数说明是对整个集合的文档查询。
find查询
指定返回的键
有时并不需要将文档中所有键值对都返回,可以通过find(或者findOne)的第二个参数来制定想要的键,这样即会节省传输的数据量,又能节省客户端解码文档的时间和内存消耗。
例如:
> db.people.find()
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d08f7f0eb7b5f5718da82a"), "name" : "joe", "age" : 65 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
>
如果只对name和age感兴趣,可以这样查询:
> db.people.find({"name":"joe","age":21})
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
>
但是"_id"总是被返回,即便没有指定。
可以使用第二个参数来剔除查询结果中的某个键值对,例如,如果不希望显示"friends" : 32的键值对:
> db.people.find({},{"friends":0})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "enemies" : 2 }
{ "_id" : ObjectId("54d08f7f0eb7b5f5718da82a"), "name" : "joe", "age" : 65 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
>
也可以用来防止返回"_id":
> db.people.find({"age":21},{"_id":0})
{ "name" : "joe", "age" : 21 }
2、查询条件
查询不仅能精确匹配,还能匹配更加复杂的条件,比如范围,OR子句或者取反。
2.1、查询条件
查询条件的比较操作符:
"$lt" 对应 <
"$lte" 对应<=
"$gt" 对应>
"$gte" 对应>=
"$ne" 对应“不相等”
> db.people.find({"age":{"$gte":30,"$lte":50}})
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
> db.people.find({"age":{"$ne":65}})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
"$ne" 用于所有数据的类型。
2.1、OR查询
有两种方式进行OR查询。
"$in":可以用于查询一个键的多个值;
"$or":完成多个键值的任意给定值。
2.1.1"$in"
对于单一键要是有多个值与其匹配的话,就要用"$in"加一个条件数组:
> db.people.find({"age":{"$in":[21,49,65]}})
{ "_id" : ObjectId("54d08f7f0eb7b5f5718da82a"), "name" : "joe", "age" : 65 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
>
"$in"非常灵活,可以指定不同类型的条件和值:
> db.people.insert({"age":"kkk"})
WriteResult({ "nInserted" : 1 })
> db.people.find({"age":{"$in":[21,"kkk"]}})
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d334cbb174be28d017c1a6"), "age" : "kkk" }
>
要是"$in"对应的数组只有一个值,那么和直接匹配这个值的效果是一样的。
> db.people.find({"age":{"$in":[21]}})
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
> db.people.find({"age":21})
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
>
2.1.1"$nin"
和"$in"相对的是"$nin",将返回与数组中所有条件都不匹配的文档:
> db.people.find({"age":{"$nin":[21,49,65]}})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d334cbb174be28d017c1a6"), "age" : "kkk" }
>
2.1.1"$or"
"$or"接受一个包含所有可能条件的数组作为参数:
> db.people.find({"$or":[{"age":"kkk"},{"friends":32}]})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d334cbb174be28d017c1a6"), "age" : "kkk" }
>
同时"$or"可以包含其他条件句:
> db.people.find({"$or":[{"age":"kkk"},{"friends":32},{"age":{"$in":[21,65]}}]})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d08f7f0eb7b5f5718da82a"), "name" : "joe", "age" : 65 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d334cbb174be28d017c1a6"), "age" : "kkk" }
>
AND型的查询,总是尽可能地用最少的条件来限定结果的范围;而OR型的查询则相反,第一个条件尽可能地匹配更多的文档,这样才是最高效的。
find查询
指定返回的键
有时并不需要将文档中所有键值对都返回,可以通过find(或者findOne)的第二个参数来制定想要的键,这样即会节省传输的数据量,又能节省客户端解码文档的时间和内存消耗。
例如:
> db.people.find()
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d08f7f0eb7b5f5718da82a"), "name" : "joe", "age" : 65 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
>
如果只对name和age感兴趣,可以这样查询:
> db.people.find({"name":"joe","age":21})
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
>
但是"_id"总是被返回,即便没有指定。
可以使用第二个参数来剔除查询结果中的某个键值对,例如,如果不希望显示"friends" : 32的键值对:
> db.people.find({},{"friends":0})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "enemies" : 2 }
{ "_id" : ObjectId("54d08f7f0eb7b5f5718da82a"), "name" : "joe", "age" : 65 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
>
也可以用来防止返回"_id":
> db.people.find({"age":21},{"_id":0})
{ "name" : "joe", "age" : 21 }
2、查询条件
查询不仅能精确匹配,还能匹配更加复杂的条件,比如范围,OR子句或者取反。
2.1、查询条件
查询条件的比较操作符:
"$lt" 对应 <
"$lte" 对应<=
"$gt" 对应>
"$gte" 对应>=
"$ne" 对应“不相等”
> db.people.find({"age":{"$gte":30,"$lte":50}})
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
> db.people.find({"age":{"$ne":65}})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
"$ne" 用于所有数据的类型。
2.1、OR查询
有两种方式进行OR查询。
"$in":可以用于查询一个键的多个值;
"$or":完成多个键值的任意给定值。
2.1.1"$in"
对于单一键要是有多个值与其匹配的话,就要用"$in"加一个条件数组:
> db.people.find({"age":{"$in":[21,49,65]}})
{ "_id" : ObjectId("54d08f7f0eb7b5f5718da82a"), "name" : "joe", "age" : 65 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d08fbd0eb7b5f5718da82c"), "name" : "joe", "age" : 49 }
>
"$in"非常灵活,可以指定不同类型的条件和值:
> db.people.insert({"age":"kkk"})
WriteResult({ "nInserted" : 1 })
> db.people.find({"age":{"$in":[21,"kkk"]}})
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d334cbb174be28d017c1a6"), "age" : "kkk" }
>
要是"$in"对应的数组只有一个值,那么和直接匹配这个值的效果是一样的。
> db.people.find({"age":{"$in":[21]}})
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
> db.people.find({"age":21})
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
>
2.1.1"$nin"
和"$in"相对的是"$nin",将返回与数组中所有条件都不匹配的文档:
> db.people.find({"age":{"$nin":[21,49,65]}})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d334cbb174be28d017c1a6"), "age" : "kkk" }
>
2.1.1"$or"
"$or"接受一个包含所有可能条件的数组作为参数:
> db.people.find({"$or":[{"age":"kkk"},{"friends":32}]})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d334cbb174be28d017c1a6"), "age" : "kkk" }
>
同时"$or"可以包含其他条件句:
> db.people.find({"$or":[{"age":"kkk"},{"friends":32},{"age":{"$in":[21,65]}}]})
{ "_id" : ObjectId("54d08a1d0eb7b5f5718da828"), "name" : "joe", "friends" : 32,
"enemies" : 2 }
{ "_id" : ObjectId("54d08f7f0eb7b5f5718da82a"), "name" : "joe", "age" : 65 }
{ "_id" : ObjectId("54d08fb70eb7b5f5718da82b"), "name" : "joe", "age" : 21 }
{ "_id" : ObjectId("54d334cbb174be28d017c1a6"), "age" : "kkk" }
>
AND型的查询,总是尽可能地用最少的条件来限定结果的范围;而OR型的查询则相反,第一个条件尽可能地匹配更多的文档,这样才是最高效的。
相关文章推荐
- 英特尔至强系列处理器发布计划曝光
- 阅面携手英特尔发布“繁星”系列产品,推动机器视觉迈入AI芯片新纪元
- 处理器至强系列
- Intel X99、Z97、H97系列晶片组曝光,兼容Haswell处理器
- AMD将发布6核处理器 价格不到英特尔三分之一
- 英特尔发布体积最小功耗最低处理器“凌动”
- 英特尔推出8核服务器处理器X7500系列
- 微信上线新版电子社保卡 | 英特尔将为5年内9成处理器提供补丁 计划下周末推送
- HDU--杭电--4502--吉哥系列故事——临时工计划--背包--01背包
- [js高手之路]设计模式系列课程-委托模式实战微博发布功能
- 数据系列专题视频课程-处理重复数据发布啦
- 英特尔发布新安腾9500处理器 惠普跟进
- 1003吉哥系列故事——临时工计划
- Java并发系列(二)线程安全与对象的发布
- win9什么时候出?win9系统下载发布时间曝光
- Go语言前端合并到GCC主干了,计划成为GCC4.6发布功能的一部分
- Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优
- Redis系列(三)-Redis发布订阅及客户端编程
- Windows Phone 7 EKB系列文章发布
- 组策略轻松实现软件发布,Active Directory系列之二十二