学习MongoDB六:MongoDB查询(游标操作、游标信息)(三)(一)

2015-07-21 16:27:49 · 作者: · 浏览: 34
  1. 参数
  1. 类型
  1. 描述
  1. query
  1. document
  1. 可选. 使用查询操作符指定查询条件
  1. projection
  1. document
  1. 指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段

一、简介

db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段。并返回到匹配文档的游标,可以随意修改查询限制、跳跃、和排序顺序的功能。


二、db.collection.findOne ()

db.collection. findOne ()返回满足指定查询条件的文档。如果多个文档满足查询,该方法返回第一个文档,根据自然顺序返回文件在磁盘上的顺序,在覆盖的集合中,自然顺序与插入顺序相同。


语法:


   db.collection.findOne(query, projection)




Projection语法:


 { field1: 
  
   , field2: 
   
     ... }
   
  


说明:
1或者true表示返回字段
0或者false表示不返回该字段
先插入数据


>db. orders.insert([
{
        "onumber" : "001", 
        "date" : "2015-07-02", 
        "cname" : "zcy1", 
        "items" :[ {
        "ino" : "001",
                  "quantity" :2, 
                  "price" : 4.0
         },{
                 "ino" : "002",
                  "quantity" : 4, 
                  "price" : 6.0
           }
         ]
},{
        "onumber" : "002", 
        "date" : "2015-07-02", 
        "cname" : "zcy2", 
        "items" :[ {
                  "ino" : "001",
                  "quantity" :2, 
                  "price" : 4.0
                 },{
                  "ino" : "002",
                  "quantity" :6, 
                  "price" : 6.0
                  }
               ]
}
])


我们用db.orders.find()查询时返回多条记录


   >db.orders.find({"date":"2015-07-02"})


\


我们执行db.orders.findOne()时,只返回第一条记录


例子:


  >db.orders.findOne({"date":"2015-07-02"})


\


二、游标的遍历

db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段。并返回到匹配文档的游标,可以随意修改查询限制、跳跃、和排序顺序的功能。


1、我们先通过java script脚本向集合中填充10000条文档,然后执行db.collection.find()执行查询文档


> for(var i=0;i<10000;i++){
...db.items.insert({"ino":i,"quantity":i});
... }
WriteResult({ "nInserted" : 1 })
> db.items.find()
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681076"), "ino" : 0,"quantity" : 0 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681077"), "ino" : 1,"quantity" : 1 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681078"), "ino" : 2,"quantity" : 2 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681079"), "ino" : 3,"quantity" : 3 }
{ "_id" : ObjectId("55a66f3c7db4e9f2ef68107a"),"ino" : 4, "quantity" : 4 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef68107b"), "ino" : 5,"quantity" : 5 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef68107c"), "ino" : 6,"quantity" : 6 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef68107d"), "ino" : 7, "quantity": 7 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef68107e"), "ino" : 8,"quantity" : 8 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef68107f"), "ino" : 9,"quantity" : 9 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681080"), "ino" : 10,"quantity" : 10 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681081"), "ino" : 11,"quantity" : 11 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681082"), "ino" : 12,"quantity" : 12 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681083"), "ino" : 13,"quantity" : 13 }
{ "_id" : ObjectId("55a66f3c7db4e9f2ef681084"),"ino" : 14, "quantity" : 14 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681085"), "ino" : 15,"quantity" : 15 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681086"), "ino" : 16,"quantity" : 16 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681087"), "ino" : 17,"quantity" : 17 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681088"), "ino" : 18,"quantity" : 18 }
{ "_id" :ObjectId("55a66f3c7db4e9f2ef681089"), "ino" : 19,"quantity" : 19 }
Type "it" for more
> 




我们db.collection.find()执行查询文档时,发现Mongo shell如果没有分配给一个使用var关键字的变量迭代数据时,光标自动迭代前20个文档的结果返回。
输入“it”后会显示后二十条的数据。


2、你可以使用DBQuery.shellbatchsize改变迭代次数(每页就显示10条记录)


例子:


     >DBQuery.shellBatchSize = 10


\


现在光标自动迭代前10个文档的结果返回


3、我们定义一个变量来保存这个游标


例子:


      > var cursor=db.items.find()


\


用一个变量来保存游标,不会自动输出数据的,需要我们自己实现这个查询结果的游标进行遍历。


4、对游标进行遍历


    >var cursor=db.items.f