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过多的文档,会导致速度比较慢,这是你的分页可能的想想其他方法了。例如可以根据时间排序,然后下一页时,根据上一页的最后一条记录的时间作为这一页查询的条件。
相关推荐
数据库mongodb和navicat,navicat121_mongodb_cs_x64.exe和navicat121_mongodb_cs_x86.exe
可视化工具mongodb操作简单,可视化强 欢迎大家下载
Data-Unit_MongoDB_Restore适用于磁盘存储故障、勒索病毒删除、误操作删除等导致的数据库丢失恢复。运行工具后将数据文件拖入本窗口即可。也支持扫描分区和裸磁盘,建议扫描磁盘镜像文件,效果更好。 免费版每个集合...
很全的_Mongodb数据库学习文档_与_php操作mongodb
navicat150_mongodb_cs_x64 官方中文版 win10版可视化工具 非常好用!!!
navicat可以连接MongoDB数据库,也可以连接oracle和mysql等其他的数据库,挺好用的
MongoDB操作手册详细介绍MongoDB的语法用法
mac下navicat_mongodb
NoSQLBooster_for_MongoDB_v6.0.5_x64_crack.zip
nosql_manager_for_mongodb_pro_4.9.9.2_破解版 这是一个功能强大的MongoDB操作软件 破解版,可以导入导出数据,欢迎下载
该文件为zabbix3.2.x MongoDB监控模板,可以直接导入3.2里面,其他版本的没试过导入。
koa-mongo_node+mongoDB实现登录_loadh2h_koamongo_MongoDB_源码.zip
mongodb-docs-2011-01-29_mongodb最新用户手册
面向字节_MongoDB.pdf
同步Mongodb数据库,用于同步数据库,局域网内
mongodb for java api 英文版
MongoDBNotesForProfessionals_MongoDB_mongodbbook_zip.zip
访问文件夹,并获取文件夹中文件,读取内容,并写入mongodb数据库。运行程序是,需要开启mogodb的服务端。
MongoDBNotesForProfessionals_MongoDB_mongodbbook_zip_源码.rar