mongoDB学习笔记<一>

1.find函数的要点和使用

find的介绍与使用

MongoDB数据查询使用find函数,其功能与SQL中的select函数相同,可提供与关系型数据库类似的许多功能,包含映射、排序等。

db.集合名.find(query,fields,limit,skip)

主要有四个参数:

query:指明查询条件,相当于SQL中的where语句

fields:用于字段映射,指定是否返回该字段,0代表不返回,1代表返回

limit:限制查询的结果集的文档数量,指定查询返回结果集的上限

skip:跳过一定数据量的结果,设置第一条返回文档的偏移量

注意事项

mongoDB不支持多集合间的连接查询,find函数一次查询只能针对一个集合

find参数为空或者查询条件为空文档时,返回集合中的全部文档

  除了limit和skip作为find函数的参数外,还可以单独使用limit和skip函数来修饰查询结果

  返回的查询结果集在默认的情况下是无序的,如果需要对结果集进行排序,可以使用sort函数

  db.collection.findOne()只会返回第一条数据

当查询的集合文档数量很大时,为了加快数据的查询速度可以创建索引

  除了使用find函数实现基本查询外,MongoDB还提供了聚合框架,用于复杂查询

2. 查询操作符的介绍及使用

  2.1条件操作符

    $gt  >

    $gte >=

    $lt  <

    $lte <=

    $ne  !=

    如:某集合B集合中文档有属性x值为整数,需查找10<x<=30的文档

    db.B.find({"x":{"$gt":10,"$lte":30}})

    如:从某集合B中查找日期属性day值大于2012/01/01的文档数据db.B.find({"day":{"$gt":new Date("2012/01/01")}})

  2.2    $in包含/$nin不包含

    $in:查询匹配指定条件值的文档;

    $nin:查询不匹配指定条件值的文档;

    SQL:写法:字段 in (‘值1‘,‘值1‘.....)

    mongodb:db.B.find({"x":{"$in":[‘值1‘,‘值2‘,.....]}})

    SQL:写法:字段 not in (‘值1‘,‘值1‘.....)

    mongodb:db.B.find({"x":{"$nin":[‘值1‘,‘值2‘,.....]}})

    $in/$nin优点:可指定不同类型条件和值。

  2.3    $or或查询

    $or:查询匹配多个条件多个值的文档;

    SQL:写法:字段1 = ‘xxx‘ or 字段2 in ( ‘xxx‘).....

    Mongodb :db.B.find({"$or":[{"x":{"$in":[‘值1‘,‘值2‘...]}},{"y":"3"}]})

  2.4 $all匹配所有

   {"name":jack,"age":[1,2,3]}

    {"name":jack,"age":[1,4,3]}

    db.B.find({"age":{"$all":[2,3]}})

    结果:{"name":jack,"age":[1,2,3]}

    $all的查询模式更像是去取交集,即同时满足查询条件才能被查询出来

  2.5  $exists判断属性是否存在

    db.B.find({"name":{"$exists":true}})   --查找属性name存在的文档

    db.B.find({"name":{"$exists":false}})  --查找属性name不存在的文档

  2.6  属性值为null的情况

    如下操作并可知道:

    > db.C.find()

    { "_id" : ObjectId("5018fccd1781352fe25bf511"), "a" : "14", "b" : "14" }

    { "_id" : ObjectId("5018fccd1781352fe25bf512"), "a" : "15", "b" : "15" }

    { "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }

    > db.C.find({"c":null})

    { "_id" : ObjectId("5018fccd1781352fe25bf511"), "a" : "14", "b" : "14" }

    { "_id" : ObjectId("5018fccd1781352fe25bf512"), "a" : "15", "b" : "15" }

    { "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }

    可见查询属性c值为null文档,包括属性c值为null、该属性c不存在两个部分。若想只查询属性c为null的文档

    如下:

    > db.C.find({"c":{"$in":[null],"$exists":true}})

    { "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }

  2.7  $not元条件句

    可与其他条件配合使用,即不在匹配范围之内的文档

  2.8  $mod取模运算

    db.B.find({"age":{"$mod":[5,1]}}) --表示查找年龄/5余1的所有文档

    若查找年龄/5余1之外的所有文档,可结合$not运算:

    db.B.find({"age":{"$not":{"$mod":[5,1]}}})

  2.9  正则表达式

    db.B.find({"name":/jack/i})

  2.10 $size

   { "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 1, 2, 3 ] }

   { "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }

   > db.C.find({"b":{"$size":2}})

   { "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }

  2.11 $slice

    返回数组的一个子集,即对以某属性为基础,返回多少条(范围)。也可以接受偏移值和要返回的元素数量,来返回中间的结果。

    > db.C.find()

    { "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 1, 2, 3 ] }

    { "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }

    > db.C.findOne({},{"b":{"$slice":[2,3]}})

    { "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 3 ] }

    > db.C.findOne({},{"b":{"$slice":-2}})

    {"_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 2, 3 ]}

  2.12 $where

   即可执行任务JavaScript作为查询的一部分。

  $where的值可以是function、也可以是字符串等等。

  db.C.find({"$where":function(){return this.a == "1"}})与db.C.find({"$where":"this.a == ‘1‘"}})

  注意:采用$where子句查询在速度上较常规查询慢的多。因文档需要从BSON转换成javascript对象,然后通过"$where"的表达式来运行。

  不用利用索引。可用常规查询做前置过滤,配置"$where"查询进行调优,可达到不牺牲性能的要求。

3. 游标

   使用游标返回find的执行结果,客户端对游标的实现通常能对结果进行数量的限制、略过部分结果、排序等有效控制。

  var cursor = db.C.find()     --定义游标

  while(cursor.hasNext()){

     var obj = cursor.next();

     print(obj.a);

     ......

  }

  db.C.find().limit(10)  --限制查询的结果条数为10条

  db.C.find().skip(10)   --忽略匹配的前10条,显示从第11条匹配的文档开始所有的文档

  db.C.find().sort({"a":-1})  --sort以键/值,表示按某个属性进行排序,1:升序,-1:降序

  高级查询选项:

  $maxscan:integer  --指定查询最多扫描的文档数量

  $min:document     --查询的开始条件

  $max:document     --查询的结束条件

  $hint:document    --指定服务器使用哪个索引进行查询

  $explain:boolean  --获取查询执行的细节(用到的索引、结果数量、耗时等),而并非真正执行查询

  $snapshot:boolean --确保查询的结果是在查询执行那一刻的一致快照

时间: 2024-10-06 23:52:43

mongoDB学习笔记<一>的相关文章

MongoDB学习笔记系列

回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助和启发,文章中有对新技术的研究(Mongo驱动),对老技术的回顾(代码重构),还有对架构设计的阐述等(面向接口编程,对扩展开放,对修改关闭,所以出现了IMongoRepository接口). MongoDB学习笔记系列~目录 MongoDB学习笔记~环境搭建 (2015-03-30 10:34) M

MongoDB学习笔记一:MongoDB的下载和安装

趁着这几天比较空闲,准备学习一下MongoDB数据库,今天就简单的学习了一些MongoDB的下载和安装,并创建了存储MongoDB的数据仓库.将自己今天学习到的写成博客分享给大家. 一.MongoDB的下载和安装 MongoDB的下载地址为:http://www.mongodb.org/ 1.进入官网的首页后,在首页的右上方单击Downloads连接,如图所示: 2.在页面中可以看到目前最新的版本和以前发布过的版本,这里选择最新版本,windows 32位的进行下载,文件的格式为ZIP格式的,单

MongoDB学习笔记(一:安装时出现The default storage engine &#39;wiredTiger&#39; is not available问题解决)

今晚在自己老式笔记本来试了一下MongoDB的安装,由于配置比较低,只能选择32位版本的MongoDB进行安装,在安装过程中碰到了上述标题所示错误,自己也捣鼓了一个小时左右,终于在一篇博客中找到答案,具体原文链接如下:http://blog.csdn.net/u013457382/article/details/50775268 MongoDB学习笔记(一:安装时出现The default storage engine 'wiredTiger' is not available问题解决)

Mongodb学习笔记

总结下这几天Mongodb学习笔记 /** * 获取MongoClient * @author xuyw * @email [email protected] * @param host * @param port * @return */ public static MongoClient getMongoClient(String host, int... port) { MongoClient mongoClient = null; int portlen = 0; try { if (p

[Spring Data MongoDB]学习笔记--建立数据库的连接

1. 有了上一篇的Mongo后,连接数据库我们还需要更多的信息,比如数据库名字,用户名和密码等. 我们可以继续来配置MongoDbFactory的实例. public interface MongoDbFactory { DB getDb() throws DataAccessException; DB getDb(String dbName) throws DataAccessException; } 然后我们可以继续用MongoDbFactory来创建MongoTemplate的实例. pu

mongodb学习笔记系列一

一.简介和安装 ./bin/mongod --dbpath /path/to/database --logpath /path/to/log --fork --port 27017 mongodb非常的占磁盘空间, 刚启动后要占3-4G左右,--smallfiles 二.基本命令 1.登录mongodb client /use/local/mongo 2.查看当前数据库 show databases; show dbs; 两个可能 3.admin是和管理有关的库,local 是放schema有关

[Spring Data MongoDB]学习笔记--牛逼的MongoTemplate

MongoTemplate是数据库和代码之间的接口,对数据库的操作都在它里面. 注:MongoTemplate是线程安全的. MongoTemplate实现了interface MongoOperations,一般推荐使用MongoOperations来进行相关的操作. MongoOperations mongoOps = new MongoTemplate(new SimpleMongoDbFactory(new Mongo(), "database")); MongoDB docu

[Spring Data MongoDB]学习笔记--注册一个Mongo实例

1. 通过Java based bean metadata @Configuration public class AppConfig { public @Bean Mongo mongo() throws UnknownHostExceptioin { return new Mongo("localhost"); } } 上面的方式包含异常处理,这并不是我们想要的. 所以,应该尽量用下面这种方式MongoFactoryBean,或者后面的xml方式. @Configuration p

MongoDB 学习笔记(二) 之查询

最简单的查询 个人认为mongoDB是面向对象的吧. 例如最简单的查询  整个数据集只有三条数据 第一查询姓名为张三的  数据 查询的条件比较好写 随意   db.collection.find(查询条件)   例如 15 得到的结果是这样 如果你不想返回某个字段呢 ,你可以自己定义返回的字段值 语法这样 db.collection.find({查询条件},{返回字段}) 16 我们看到每次查询 "_id" 这个字段 都返回  我们可以将它设置为0 这样的话就不会返回 如 查询条件里的

mongodb 学习笔记 02 -- CURD操作

mongodb 学习笔记 02 – CURD操作 CURD代表创建(Create).更新(Update).读取(Read)和删除(Delete)操作 创建库 直接 use 库名 然后创建collection 就可以创建库 创建collecion db.createCollection("collectionName") 隐式创建collection db.collectionName.insert({xxxxxx}) 删除collection db.collectionName.dro