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

MongoDB查询操作有哪些情况,具体操作是怎样的?

发布时间:2023-09-20 15:59:21 所属栏目:系统 来源:
导读:  使用find或findOne进行查询。并可以进行范围查询、数据集查询、不等式查询,以及其他的一些查询。

  查询将会返回DBcursor 游标只有在你需要的时候返回文档

  针对游标返回的文档(结果集) 进行操作
  使用find或findOne进行查询。并可以进行范围查询、数据集查询、不等式查询,以及其他的一些查询。
 
  查询将会返回DBcursor 游标只有在你需要的时候返回文档
 
  针对游标返回的文档(结果集) 进行操作 例如:忽略一定数量的结果,或者返回结果的数量,以及对结果的排序。
 
  1.指定需要返回的键
 
  有时候仅仅对文档的某几个键值感兴趣,可以屏蔽返回的不感兴趣的键值,返回感兴趣的键值
 
  mongos> db.blog.find({},{“name”:1})
 
  { “_id” : ObjectId(“5659836e73c8340448fa470e”) }
 
  { “_id” : ObjectId(“565e5c0e73c8340448fa470f”) }
 
  { “_id” : ObjectId(“565f998e73c8340448fa4710”) }
 
  { “_id” : 1, “name” : “zmkzmkzmkzmkzmk” }
 
  { “_id” : 2, “name” : “zmkzmkzmkzmkzmk” }
 
  { “_id” : 3, “name” : “zmkzmkzmkzmkzmk” }
 
  { “_id” : ObjectId(“566004d173c8340448fa4712”), “name” : “zmk” }
 
  可以这样:
 
  mongos> db.blog.find({},{“name”:1,”_id”:0})
 
  { “name” : “zmkzmkzmkzmkzmk” }
 
  { “name” : “zmkzmkzmkzmkzmk” }
 
  { “name” : “zmkzmkzmkzmkzmk” }
 
  { “name” : “zmk” }
 
  指定返回的键值,是查询结果更高效。此接口可用于条件查询,方便结果处理。
 
  2.查询条件
 
  比较操作符
 
  "$lt"、"$lte"、“$gt”,“$gte” 分别对应 <,<=,>,>=。
 
  小贴士:在mongodb shell中定义方法的大概格式:
 
  mongos> var insertName=function(){
 
  … for(var i=0;i<10;i++){
 
  … db.blog.insert({“_id”:1,”name”:”zmk”+i})
 
  … }
 
  … }
 
  mongos> insertName()
 
  效果:
 
  mongos> db.blog.find()
 
  { “_id” : 1, “name” : “zmk0” }
 
  { “_id” : 0, “name” : “zmk0” }
 
  { “_id” : 2, “name” : “zmk2” }
 
  { “_id” : 3, “name” : “zmk3” }
 
  { “_id” : 4, “name” : “zmk4” }
 
  { “_id” : 5, “name” : “zmk5” }
 
  { “_id” : 6, “name” : “zmk6” }
 
  { “_id” : 7, “name” : “zmk7” }
 
  { “_id” : 8, “name” : “zmk8” }
 
  { “_id” : 9, “name” : “zmk9” }
 
  观察下面的效果,find可以使用“$lt”<来查询文件插入的时间
 
  mongos> db.blog.insert({“_id”:10,”time”:new Date()})
 
  WriteResult({ “nInserted” : 1 })
 
  mongos> db.blog.find({“time”:{“$lt”:new Date()}})
 
  { “_id” : 10, “time” : ISODate(“2015-12-05T12:08:53.469Z”) }
 
  3.查询数组
 
  1.$all
 
  应用于多个元素匹配数组,且并无顺序。
 
  mongos> db.blog.insert({“_id”:1,”fruit”:[“apple”,”banana”,”peach”]})
 
  WriteResult({ “nInserted” : 1 })
 
  mongos> db.blog.insert({“_id”:2,”fruit”:[“apple”,”kumquat”,”orange”]})
 
  WriteResult({ “nInserted” : 1 })
 
  mongos> db.blog.insert({“_id”:3,”fruit”:[“cherry”,”banana”,”apple”]})
 
  WriteResult({ “nInserted” : 1 })
 
  mongos> db.blog.find({“fruit”:{$all:[“apple”,”banana”]}})
 
  { “_id” : 1, “fruit” : [ “apple”, “banana”, “peach” ] }
 
  { “_id” : 3, “fruit” : [ “cherry”, “banana”, “apple” ] }
 
  对数组进行精确匹配,可以使用key.index语法指定下标
 
  mongos> db.blog.find({“fruit.2”:”peach”})
 
  { “_id” : 1, “fruit” : [ “apple”, “banana”, “peach” ] }
 
  2.$size
 
  查询特定长度的数组。
 
  mongos> db.blog.find({“fruit”:{$size:3}})
 
  { “_id” : 1, “fruit” : [ “apple”, “banana”, “peach” ] }
 
  { “_id” : 2, “fruit” : [ “apple”, “kumquat”, “orange” ] }
 
  { “_id” : 3, “fruit” : [ “cherry”, “banana”, “apple” ] }
 
  可以再存有数组的文档中添加size键,每一次向指定数组中添加元素,同时增加“size”的值,自增操作非常快,对性能不影响。
 
  3.slice
 
  可以返回某个键匹配的数组元素的一个子集
 
  mongos> db.blog.find({“fruit”:{size:3}},{"fruit":{"slice”:-2}})
 
  { “_id” : 2, “fruit” : [ “kumquat”, “orange” ] }
 
  { “_id” : 3, “fruit” : [ “banana”, “apple” ] }
 
  4.查询内嵌文档
 
  点语法即可
 
  mongos>db.people.find({“name.first”:”Joe”,”name.last”:”Schmoe”})
 
  要正确的指定一组元素,而不必指定每个键,则需要使用$elemMatch 用来在查询条件中不非指定匹配数组中的单个内嵌文档。
 
  db.blog.find({“comments”:{“$elemMatch”:
 
  {“author”:”joe”,”score”:{“$gte”:5}}}})
 
  5.limit、skip和sort
 
  三个方法可以组合进行分页.
 
  比如你有一个在线商店,有人搜索mp3,若想每页返回50个结果,而且按照价格从高到低升序排列。
 
  db.stock.find({“des”:”mp3”}).limit(50).sort({“price”:-1})
 
  db.stock.find({“des”:”mp3”}).skip(50).limit(50).sort({“price”:-1})
 
  ……
 
  然而略过太多会导致性能问题。
 
  解决方法:尽量避免使用skip略过大量结果。
 
  var page1=db.stock.find({“des”:”mp3”}).limit(50).sort({“price”:-1})
 
  var lastest=null;//解决方法,将游标最后一个文档记录下来,成为第二次查询的条件的一部分
 
  while(page1.hasNext()){
 
  lastest=page1.next();
 
  display(lastest);
 
  }
 
  var page2=db.stock.find({“des”:”mp3”},{“price”:{$gt:lastest.price}}).limit(50).sort({“price”:-1})
 
  ……
 
  随机选取文档
 
  正确方法是在插入文档时插入一个随机值的键,然后按照普通查询进行find()即可。
 
 

(编辑:聊城站长网)

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

    推荐文章