当前位置: 首页 > news >正文

MongoDB权威指南学习笔记4---查询相关的知识点

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1 find

find({查询条件},{"key":1,"email":1})  后面表示返回哪些键

2 可用的比较操作符

$lt , $lte,$gt,$gte

比如db.users.find({"age":{"$gte":18,"$lte":30}})

3不等于

find(...{"key":{"$ne":"value"}}

4 in

find(...{"key":{"$in":[1,2,3]}}

5 nin

find(...{"key":{"$nin":[1,2,3]}}

6 or

find( {"$or":[  {"key1":"value1"}, {"key2":"value2"}          ]})

 find( {"$or":[  {"key1":   {"$in":["value1","value2"]}    }, {"key2":"value2"}          ]})

7$mod

find({"key": {"$mod":[5,1]}})

8 not

find({"key":{"$not":{"$mod":[5,1]}}})

9 and

find({"$and":[{"x":{"$lt":1}},  {"x":4}]})

这个匹配{"x"[0,4]}

等同于 find({"x":{"$lt":1,"$in":[4]}})

10 关于null

find( {"y": null } )---不仅会找到y:null的文档,还会找到不存在此字段的文档。

可以使用

find( {"z": {"$in" : [null],"$exists":true}})

11 查询使用正则表达式 ---PCRE

查询名为Joe或者joe

find({"name": /joe/i})

find({"name": /joe?/i})

find({"name": /^joe/})

12 查询数组

find({"fruit":"value1"}) 也就是数组中包含value1就可以搜到!

13数组中包含多个

find(  {"fruit":  {"$all":["value1","value2"]}}

也就是数组既包含value1又包含value2

14精确匹配

find({"fruit":【"value1","value2"]})

数组包含且仅仅包含这2个值才可以!

15数组的序号查询

find({"fruit.2":"peach"})

 16$size

find({"fruit":{"$size":3}})

17$slice

findOne(criteria,{"comments":{"$slice":10}})

返回前10条评论! 

findOne(criteria,{"comments":{"$slice":-10}})

返回后10条评论!

findOne(criteria,{"comments":{"$slice":【23,10】}})

跳过23个元素,尽可能返回10个元素!

注意,只能对comments进行控制,其它字段仍然返回!

18 $

模式:

comments:[{name:bob,email:xxx}, ................]

find({"comments.name":"bob"},{"comments.$":1})

返回第一个匹配的文档。

19 数组的查询

{"x": {"$gt" : 10,"$lt":20}}

如果此时x是一个数组,则任何一个元素满足其中1个条件就可以认为匹配!

但是如果不是一个数组,则进行同时匹配!

20$elemMatch

首先,只会针对数组元素进行匹配

find({"x":{"$elemMatch":{"$gt":10,"$lt":20}})

21如果创建了索引

find({"x": {"$gt" : 10,"$lt":20}}).min({"x":10}).max({"x":20})

效果非常好!因为不是扫描所有索引,而是在部分索引里进行扫描! 

 22 查询内嵌文档

find({"name":{"first":"joe","last":"schmoe"}})---精确匹配!

悲剧的是,这种查询还是顺序相关的!!!

注意:对于内嵌文档,这种查询都是精确匹配,必须用下面的方式!

23 更好的做法

find({"name.first“:"joe",  "name.last":"schmoe"})

难道是or的关系???

24 请参考$elemMatch的方法!

25终极必杀技-where

----------------关于游标

每次取100条或者4MB,取较小的一个。

find().skip(3).limit(10).sort({"key1":1,"key2":-1})._addSpecial("$maxscan",20)

._addSpecial("$min",20)

 ._addSpecial("$max",20)

._addSpecial("$showDiskLoc":true)

.snapShot()---会让查询变慢!

 备注:可以在启动mongod时指定--noscripting,关闭js的运行!---关闭服务器端脚本!

 

转载于:https://my.oschina.net/qiangzigege/blog/297443

相关文章:

  • Unity3d热更新全书-加载(一)从AssetBundle说起
  • JVM -XX: 参数介绍
  • 代码的坏味道之五 ——译自《重构》
  • 【转载】跨语言通信方案比较
  • 【WP 8.1开发】自定义(RAW)通知的使用
  • java 递归函数
  • jQuery Validation Engine 表单验证
  • GLES Shader Language 易错集锦
  • python的getopt
  • mac下mysql忘记root密码
  • 编程语言,变量
  • 关于git和github用法
  • Python学习(一)——数据类型
  • 定制微型Linux系统(续)
  • Redis进阶 ----事务
  • .pyc 想到的一些问题
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • Codepen 每日精选(2018-3-25)
  • HTTP 简介
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • js正则,这点儿就够用了
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • 排序算法学习笔记
  • 排序算法之--选择排序
  • 深度解析利用ES6进行Promise封装总结
  • 算法-图和图算法
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • k8s使用glusterfs实现动态持久化存储
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​​​​​​​​​​​​​​Γ函数
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #DBA杂记1
  • #define,static,const,三种常量的区别
  • #pragma data_seg 共享数据区(转)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (145)光线追踪距离场柔和阴影
  • (Note)C++中的继承方式
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (一)u-boot-nand.bin的下载
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .Net组件程序设计之线程、并发管理(一)
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [C++基础]-入门知识