链式查询

db.person.find().limit(4).sort({sex:-1}) // sort来说,1 是升序, -1 是降序
尽量不要用mongodb去做一些复杂的运算

分页的写法

···

最简单的分页的写法

var page1 = db.person.find(name).limit(100);

var page2 = db.person.find(name).skip(100).limit(100);

···

指定选中的列保留

db.str.find({},{_id:0,age:1}); //查询出age,不要_id

大于小于等于

> var cond={"age":{"$gte":1,"$lte":2}}
> db.person.find(cond)
{ "_id" : ObjectId("56760f3c5001a3b4af601567"), "name" : "hxc19", "age" : 1 }
{ "_id" : ObjectId("56760f3c5001a3b4af601568"), "name" : "hxc20", "age" : 1.0526315789473684 }

in,nin,or in,nin:一个key后再加上一个子文档。

> var cond={"age":{"$in":[1,2,3,4]}}
> db.person.find(cond)
{ "_id" : ObjectId("56760f3c5001a3b4af601567"), "name" : "hxc19", "age" : 1 }

find中的正则表达式,和sql中的like操作一个样 O(N) Table Scan

> var cond={"name":/18$/}
> db.person.find(cond)
{ "_id" : ObjectId("56760f3c5001a3b4af601566"), "name" : "hxc18", "age" : 0.9473684210526315 }

查询数组中的元素

> var single={"name":"jack",address:["anhui","shanghai","beijing"]}
> db.mytest.insert(single)
> db.mytest.find()
{ "_id" : ObjectId("567632624163f2ea4dd06e96"), "name" : "jack", "address" : [ "anhui", "shanghai", "beijing" ] }
> db.mytest.find({"address":"anhui"})
{ "_id" : ObjectId("567632624163f2ea4dd06e96"), "name" : "jack", "address" : [ "anhui", "shanghai", "beijing" ] }

all操作

db.mytest.find({"address":{"$all":["anhui","shanghai"]}})
{ "_id" : ObjectId("567632624163f2ea4dd06e96"), "name" : "jack", "address" : [ "anhui", "shanghai", "beijing" ] }
db.mytest.find({"address":{"$all":["anhui","s"]}})

size操作

db.mytest.find({"address":{"$size":2}})
db.mytest.find({"address":{"$size":3}})
{ "_id" : ObjectId("567632624163f2ea4dd06e96"), "name" : "jack", "address" : [ "anhui", "shanghai", "beijing" ] }

slice操作

db.mytest.find({"name":"jack"},{"address":{"$slice":1}})
{ "_id" : ObjectId("567632624163f2ea4dd06e96"), "name" : "jack", "address" : [ "anhui" ] }
db.mytest.find({"name":"jack"},{"address":{"$slice":2}})
{ "_id" : ObjectId("567632624163f2ea4dd06e96"), "name" : "jack", "address" : [ "anhui", "shanghai" ] }

where 【更灵活更强大】

可以灌输js代码,所以会有最大的灵活性。

db.person.find({"$where":function(){return this.name=="hxc19" && this.age==1}})
{ "_id" : ObjectId("56760f3c5001a3b4af601567"), "name" : "hxc19", "age" : 1 }
db.person.find({"$where":function(){ var i=1; return (this.age/1)==1 }})
{ "_id" : ObjectId("56760f3c5001a3b4af601567"), "name" : "hxc19", "age" : 1 } db.person.find({"$where":function(){return ( this.age>1&& this.age<2); }})
{ "_id" : ObjectId("56760f3c5001a3b4af601568"), "name" : "hxc20", "age" : 1.0526315789473684 }
{ "_id" : ObjectId("56760f3c5001a3b4af601569"), "name" : "hxc21", "age" : 1.105263157894737 }
{ "_id" : ObjectId("56760f3c5001a3b4af60156a"), "name" : "hxc22", "age" : 1.1578947368421053 }
{ "_id" : ObjectId("56760f3c5001a3b4af60156b"), "name" : "hxc23", "age" : 1.2105263157894737 }

mongodb--find高级用法的更多相关文章

  1. MongoDB --- 02. 基本操作,增删改查,数据类型,比较符,高级用法,pymongo

    一.基本操作 . mongod 启动服务端 2. mongo 启动客户端 3. show databses 查看本地磁盘的数据库 4. use 库名 切换到要使用的数据库 5. db 查看当前使用的数 ...

  2. Visual Studio 宏的高级用法

    因为自 Visual Studio 2012 开始,微软已经取消了对宏的支持,所以本篇文章所述内容只适用于 Visual Studio 2010 或更早期版本的 VS. 在上一篇中,我已经介绍了如何编 ...

  3. SolrNet高级用法(分页、Facet查询、任意分组)

    前言 如果你在系统中用到了Solr的话,那么肯定会碰到从Solr中反推数据的需求,基于数据库数据生产索引后,那么Solr索引的数据相对准确,在电商需求中经常会碰到菜单.导航分类(比如电脑.PC的话会有 ...

  4. sqlalchemy(二)高级用法

    sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...

  5. Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)

    上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的 ...

  6. 再谈Newtonsoft.Json高级用法

    上一篇Newtonsoft.Json高级用法发布以后收到挺多回复的,本篇将分享几点挺有用的知识点和最近项目中用到的一个新点进行说明,做为对上篇文章的补充. 阅读目录 动态改变属性序列化名称 枚举值序列 ...

  7. Jquery remove 高级用法

    Jquery remove 高级用法 html 代码 <div class="file-image">abc1111</div><div class= ...

  8. Newtonsoft.Json高级用法(转)

    手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...

  9. redis(二)高级用法

    redis(二)高级用法 事务 redis的事务是一组命令的集合.事务同命令一样都是redis的最小执行单元,一个事务中的命令要么执行要么都不执行. 首先需要multi命令来开始事务,用exec命令来 ...

  10. 【转】 Newtonsoft.Json高级用法

    手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...

随机推荐

  1. ledisDB底层实现——本质上就是用leveldb这样的底层存储,和ssdb一样,meta里存的是hash、list等的元数据

    Hash hash可以算是一种两级kv,首先通过key找到一个hash对象,然后再通过field找到或者设置相应的值. 在ledisdb里面,我们需要将key跟field关联成一个key,用来存放或者 ...

  2. 第1课 Git、谁与争锋

    1-1  安装和使用Git http://git-scm.com/downloads Git的指令模式,才能够清楚地了解Git的工作细节.最后还会介绍Git Server的架设和管理,让读者能够熟练使 ...

  3. PCB MS SQL 行转列(动态拼SQL)

    一.原数据: SELECT inman,indate FROM [fp_db].[dbo].[ppezhpbb] WHERE indate > '2016-5-1' AND indate < ...

  4. Swagger UI改造 增加 Token验证、显示控制器注释、自定义泛型缓存应用、

    /// <summary> /// Swagger 增加 Token 选项和控制器描述 /// </summary> public class CustomOperationF ...

  5. C# 设置百分比保留2位数

    double a=50; double b=100; 没有小数部分Label1.Text = (a   /   (a+b)).ToString("0%")   两位小数Label2 ...

  6. golang 获取statuscode

    最近日志打印的时候需要打印状态码,但是因为interface的原因直接获取失败,http.Request里面的response不知道怎么使用,所以就自己重写writeheader,write来截取st ...

  7. Java学习笔记之从C++转Java

    之前一直是做C++后台开发的,习惯了命令行和g++,由于工作原因现在开始转java. 1.参考书籍:java编程思想(think in java),java核心技术(core java); 2.怎么在 ...

  8. MySQL中DELETE语句嵌套子查询规则

    delete from table .....其中表名不能起别名 比如说:delete from table t where t.id = '1';(这条SQL语句将报错)

  9. Elasticsearch中的segment理解

    https://blog.csdn.net/smithallenyu/article/details/52789872 参照图 https://www.cnblogs.com/smile361/p/7 ...

  10. (转)Vue 爬坑之路(二)—— 组件之间的数据传递

    Vue 的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据.必须使用特定的方法才能实现组件之间的数据传递. 首先用 vue-cli 创建一个项目,其中 App.vue 是父组件,com ...