加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 服务器 > 系统 > 正文

MongoDB使用find来查询

发布时间:2023-11-03 15:16:14 所属栏目:系统 来源:
导读: MongoDB使用find来查询,不指定任何参数说明是对整个集合的文档查询。

find查询

指定返回的键

有时并不需要将文档中所有键值对都返回,可以通过find(或者findOne)的第二个参数来制定想要的键
 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型的查询则相反,第一个条件尽可能地匹配更多的文档,这样才是最高效的。
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章