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过多的文档,会导致速度比较慢,这是你的分页可能的想想其他方法了。例如可以根据时间排序,然后下一页时,根据上一页的最后一条记录的时间作为这一页查询的条件。
相关推荐
在SQL中,我们习惯了`WHERE`子句来过滤结果集,而在MongoDB中,我们使用的是JSON格式的查询操作符。由于MongoDB的灵活性,它在处理大数据和复杂查询时展现出了良好的性能。 ### 总结 通过本教程的学习,开发者可以...
高级查询是MongoDB支持的高级查询操作,包括$where、游标等。例如: * db.test.find({$where:function(){return this.age > 19}}) //查询年龄大于19岁的学生信息 * db.test.find().sort({age:-1}) //按照年龄降序...
本节将详细介绍 MongoDB 中的高级查询机制,包括如何检索文档的部分字段、使用条件运算符以及各种查询操作。 **检索子集字段** 在 MongoDB 中,我们可以通过指定查询文档中的字段来检索数据的子集。例如,如果不想...
MongoDB 是一个流行的开源、高性能、无模式的文档型数据库,常用于构建现代Web应用程序。在C#开发环境中,MongoDB 提供了丰富的驱动程序,使得开发者能够方便地与数据库进行交互。本压缩包中的“基于c#的Mongodb帮助...
MongoDB提供了一个强大的脚本化查询功能 `$where`,允许使用JavaScript脚本来定义查询条件。 示例:查询所有年龄大于20且用户名包含字母"a"的用户: ```javascript db.collection.find({ $where: "this.age > 20 &...
总结来说,本节MongoDB开发教程深入讲解了如何利用`$where`子句执行复杂的查询逻辑,同时强调了游标在处理查询结果时的重要性及其优化技巧。理解和掌握这些概念对于高效地使用MongoDB进行数据操作至关重要。
5. **游标处理**:查询结果通常以游标形式返回,类可能提供遍历游标的方法,如`foreach()`,使得开发者可以轻松地迭代查询结果。 6. **索引管理**:索引有助于提高查询性能。类可能会提供创建、查看和删除索引的...
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 ...
查询时可以使用游标进行迭代操作,也可以使用"$WHERE"来执行JavaScript表达式。 3. 排序和分页:查询时可以对结果进行排序,分页则可以通过"skip"和"limit"方法实现,但需要注意性能问题。 **索引与聚合操作** 1. ...
Mongodb读数据(文档documents)操作有两个方法 >find(); >findOne(); find()方法是最主要的方法,find方法返回一个指向包含查询结果集数据的游标(cursor) 标准命令是:db.collection.find(, <projection> ) ...
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奠定了坚实的基础。
MongoDB 是一种流行的开源、非关系型数据库管理系统,它以 JSON 格式的文档存储数据,提供了高可扩展性和高性能。在 PHP 中与 MongoDB 的交互主要通过 MongoDB PHP 驱动来实现,该驱动允许开发者使用 PHP 代码进行...
find方法接受一个查询对象作为参数,用于指定查询条件,返回一个游标(cursor),游标可以遍历查询到的数据。示例如下: ```javascript function selectData(db, callback) { var collection = db.collection('vip'...
查询结果会返回一个游标,使用`toArray`方法可以将游标转换成数组,便于处理。在回调函数中打印出查询到的数据。 通过上述实例详解,可以清晰地看到Node.js操作MongoDB的基本流程和方法。当然,除了插入、更新、...
- **条件筛选**:使用WHERE子句对数据进行过滤。 - **排序与限制结果集**:使用ORDER BY和LIMIT对查询结果进行排序和限制。 #### 五、单行函数 - **字符串函数**:如UPPER、LOWER、CONCAT等。 - **数值函数**:如...