`
zc985552943
  • 浏览: 291012 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Babe4ca6-5e6f-33aa-9078-762ee3ccfb7e
云计算--hadoop
浏览量:11866
5e98c2c1-2a82-3388-bc80-7fca0170bb12
redis解说
浏览量:27148
088014c7-4d3f-39ce-b72e-4ebe7046a134
MongoDB读书笔记
浏览量:16006
D2b74847-c860-3e26-96fe-3fa4498d6348
Maven读书笔记
浏览量:27236
688db20f-402d-3a1d-8188-d6153d6c7465
Java通信
浏览量:13676
社区版块
存档分类
最新评论

05_MongoDB_查询文档_$where_游标

阅读更多

1.$where

where可以接受一个javascript函数作为查询条件,并且迭代当前集合里面的所有文档,如果满足函数条件,则返回这个文档。最典型的就是比较文档中的两个键的值是否相等

//现在有下面这个集合,要找出库存和销量相同的记录
> db.foo.insert({"name":"apple","ku_cun":100,"xiao_liang":100});
> db.foo.insert({"name":"banana","ku_cun":120,"xiao_liang":100});

//下面是用$where查询
> db.foo.find({$where:function(){if(this.ku_cun == this.xiao_liang)return true;}
});
{ "_id" : ObjectId("533bd36909fa3b030490f059"), "name" : "apple", "ku_cun" : 100
, "xiao_liang" : 100 }

 this就是引用当前集合中的一个文档。

$where除了可以接受一个function函数,还可以接受一个function的字符串

//这是接受一个function的字符串,效果是一样的
> db.foo.find({$where:"function(){if(this.ku_cun == this.xiao_liang)return true;
}"});
{ "_id" : ObjectId("533bd36909fa3b030490f059"), "name" : "apple", "ku_cun" : 100
, "xiao_liang" : 100 }

 如果return true;表示当前遍历的这个文档满足条件,那么就把这条记录(文档)返回出来。

还有更复杂的查询可以利用MapReduce

特别说明:使用$where效率比较低,因为mongodb要将BOSN数据转成javascript数据,然后一个一个遍历操作。并且不能使用索引建议使用常规查询作为前置过滤,然后与$where组合使用。

 

2.游标

数据库使用游标来返回find的执行结果。客户端对游标的实现通常能够对最终结果进行有效的控制。可以限制结果的数量(limit),掠过部分数据(skip),对结果进行排序(sort),或者执行其他操作.

 

//使用limit,获取查询结果的前5条记录(文档)
> db.student.find().limit(5);
{ "_id" : 1, "name" : "aa1", "age" : 11 }
{ "_id" : 2, "name" : "aa2", "age" : 12 }
{ "_id" : 3, "name" : "aa3", "age" : 13 }
{ "_id" : 4, "name" : "aa4", "age" : 14 }
{ "_id" : 5, "name" : "aa5", "age" : 10 }

//使用skip和limit,跳过查询结果的前两条,取得后面的5条记录(文档)
> db.student.find().skip(2).limit(5);
{ "_id" : 3, "name" : "aa3", "age" : 13 }
{ "_id" : 4, "name" : "aa4", "age" : 14 }
{ "_id" : 5, "name" : "aa5", "age" : 10 }
{ "_id" : 6, "name" : "aa6", "age" : 11 }
{ "_id" : 7, "name" : "aa7", "age" : 12 }

//使用sort,对跳过前2条之后的5条记录按照age倒序  排序
> db.student.find().skip(2).limit(5).sort({"age":-1});
{ "_id" : 3, "name" : "aa3", "age" : 13 }
{ "_id" : 8, "name" : "aa8", "age" : 13 }
{ "_id" : 2, "name" : "aa2", "age" : 12 }
{ "_id" : 7, "name" : "aa7", "age" : 12 }
{ "_id" : 1, "name" : "aa1", "age" : 11 }

//使用sort,对跳过前2条之后的5条记录按照age顺序  排序
> db.student.find().skip(2).limit(5).sort({"age":1});
{ "_id" : 1, "name" : "aa1", "age" : 11 }
{ "_id" : 6, "name" : "aa6", "age" : 11 }
{ "_id" : 2, "name" : "aa2", "age" : 12 }
{ "_id" : 7, "name" : "aa7", "age" : 12 }
{ "_id" : 3, "name" : "aa3", "age" : 13 }

 因为mongodb相同的键可以对应不用类型,所以在排序时  有可能存在不同类型的比较。mongodb有一个预先定义好的,从小到大:

 如果skip过多的文档,会导致速度比较慢,这是你的分页可能的想想其他方法了。例如可以根据时间排序,然后下一页时,根据上一页的最后一条记录的时间作为这一页查询的条件。

  • 大小: 11.4 KB
分享到:
评论

相关推荐

    NoSQL之MongoDB查询

    高级查询是MongoDB支持的高级查询操作,包括$where、游标等。例如: * db.test.find({$where:function(){return this.age > 19}}) //查询年龄大于19岁的学生信息 * db.test.find().sort({age:-1}) //按照年龄降序...

    基于c#的Mongodb帮助类源码 含一个分页效率测试

    MongoDB 是一个流行的开源、高性能、无模式的文档型数据库,常用于构建现代Web应用程序。在C#开发环境中,MongoDB 提供了丰富的驱动程序,使得开发者能够方便地与数据库进行交互。本压缩包中的“基于c#的Mongodb帮助...

    Mongodb开发视频教程-第八讲(学云网配套源.ppt

    总结来说,本节MongoDB开发教程深入讲解了如何利用`$where`子句执行复杂的查询逻辑,同时强调了游标在处理查询结果时的重要性及其优化技巧。理解和掌握这些概念对于高效地使用MongoDB进行数据操作至关重要。

    Mongodb完整类

    5. **游标处理**:查询结果通常以游标形式返回,类可能提供遍历游标的方法,如`foreach()`,使得开发者可以轻松地迭代查询结果。 6. **索引管理**:索引有助于提高查询性能。类可能会提供创建、查看和删除索引的...

    电子书:MongoDB权威指南(中文版)

    514.3.4 查询内嵌文档 534.4 $where 查询 554.5 游标 564.5.2 避免使用skip 略过大量结果 584.5.3 高级查询选项 604.5.4 获取一致结果 614.6 游标内幕 63第5 章 索引 655.1 索引简介 655.1.1 ...

    深入云计算 MongoDB管理与开发实战详解pdf.part1

    4.2.10 Javascript 查询和$where 查询 4.2.11 count查询记录条数 4.2.12 limit限制返回记录数 4.2.13 skip 限制返回记录的起点 4.2.14 sort 排序 4.2.15 分页查询 4.2.16 随机抽取文档 4.3 ...

    MongoDB权威指南(中文版)高清

    494.3.1 null 494.3.2 正则表达式 504.3.3 查询数组 514.3.4 查询内嵌文档 534.4 $where查询 554.5 游标 564.5.1 limit、skip和sort 574.5.2 避免使用skip略过大量结果 584.5.3 高级查询选项 604....

    《10天掌握MongoDB》2012完整版.pdf[带书签]

    查询时可以使用游标进行迭代操作,也可以使用"$WHERE"来执行JavaScript表达式。 3. 排序和分页:查询时可以对结果进行排序,分页则可以通过"skip"和"limit"方法实现,但需要注意性能问题。 **索引与聚合操作** 1. ...

    Mongodb读数据操作

    Mongodb读数据(文档documents)操作有两个方法 >find(); >findOne(); find()方法是最主要的方法,find方法返回一个指向包含查询结果集数据的游标(cursor) 标准命令是:db.collection.find(, <projection> ) ...

    MongoDB权威指南(第二版) - 文字版可复制

    - $where查询:允许执行 JavaScript 表达式作为查询条件。 - 游标:用于控制查询结果的返回。 第5章:索引 - 索引简介:提高了查询效率,但会增加写入开销。 - 复合索引:可以提升多字段查询的性能。 - 查询优化器...

    深入云计算 MongoDB管理与开发实战详解pdf.part2

    4.2.10 Javascript 查询和$where 查询 4.2.11 count查询记录条数 4.2.12 limit限制返回记录数 4.2.13 skip 限制返回记录的起点 4.2.14 sort 排序 4.2.15 分页查询 4.2.16 随机抽取文档 4.3 ...

    MongoDB管理与开发精要《红丸出品》

    - **MongoDB**是一种开源的文档型NoSQL数据库,以其灵活的数据模型、强大的查询语言和易于使用的特性而闻名。 - **特点**:MongoDB具有自动分片、副本集、丰富的查询语言、易于扩展和集成等优点。 - **功能**:...

Global site tag (gtag.js) - Google Analytics