本文主要讲解mongoDb的一些常用的操作符的用法.随着作者本身的能力的提高,本文也会不断的完善.

官方文档链接为有: https://docs.mongodb.com/manual/reference/operator/

什么是操作符呢? 其实说白了就是 "$" 加上 in,all ,eq,lt 等一些字符组成.

在讲解开始之前,先附上本文的测试数据,准备好测试数据.

db.users.drop();
var user1={ "username":"lison", "country":"china", "address":{ "aCode":"411000", "add":"长沙" },
"favorites":{ "movies":["杀破狼 2","战狼","雷神 1"],
"cites":["长沙","深圳","上海"] }, "age":18, "salary":NumberDecimal("18889.09"), "lenght":1.79
};
var user2={ "username":"james", "country":"English", "address":{ "aCode":"311000", "add":"地址" },
"favorites":{
"movies":["复仇者联盟","战狼","雷神 1"],
"cites":["西安","东京","上海"]
}, "age":24, "salary":NumberDecimal("7889.09"), "lenght":1.35
};
var user3={ "username":"deer", "country":"japan", "address":{ "aCode":"411000", "add":"长沙" },
"favorites":{ "movies":["肉蒲团","一路向西","倩女幽魂"],
"cites":["东莞","深圳","东京"] }, "age":22, "salary":NumberDecimal("6666.66"), "lenght":1.85 };
var user4= { "username":"mark", "country":"USA", "address":{ "aCode":"411000", "add":"长沙" },
"favorites":{ "movies":["蜘蛛侠","钢铁侠","蝙蝠侠"], "cites":["青岛","东莞","上海"] },
"age":20, "salary":NumberDecimal("6398.22"), "lenght":1.77 };
var user5= { "username":"peter", "country":"UK", "address":{
"aCode":"411000", "add":"TEST"
},
"favorites":{ "movies":["蜘蛛侠","钢铁侠","蝙蝠侠"],
"cites":["青岛","东莞","上海"] }, "salary":NumberDecimal("1969.88")
};
db.users.insert(user1);
db.users.insert(user2);
db.users.insert(user3);
db.users.insert(user4);
db.users.insert(user5);

  

由于笔者的英文水平有限,所以安装了翻译插件(彩云小译); 可以同时展现英文原文 和中文翻译, 这样可以一定程度上自行判定一下翻译是否准确,避免翻译后全是中,不显示英文,如果不准确的话,就被翻译插件带偏了.

首先看官网提供的查询操作符.

那么我们现在测试一下 这几个操作符的命令:

$eq. db.users.find({"username":{"$eq":"lison"}}).pretty();  其实等同于命令  db.users.find({"username":"lison"}).pretty()

作用就是查询出数据用户名等于lison的数据.  即查询key = value 的数据,当然最好是用在数字上,字符串上用可以用, equas 的缩写

$gt: 匹配大于指定值的值 ,greater than 的缩写.

查询字段为字符串 :  db.users.find({"username":{"$gt":"lison"}}).pretty();

由以上结果可以看出$gt 用于字符串字段也是可以,比较大小的判定方式为字典中的排序方式.

查询字段类型为数字类型时 : db.users.find({"age":{"$gt":22}}).pretty();

看出查询数字类型时,是查询比制定字段值数值大的值.

$gte :   查询字段值大于等于制定值. greater than or equas 的缩写.

语法为 db.users.find({"age":{"$gte":22}}).pretty();

结果就是gt 和 eq 的并集,这里就不再演示效果.

$in :  查询的值包含指定数组中的任何一个元素即可.

db.users.find({"username":{"$in":["lison","mark"]}}).pretty();

当 查询的字段类型为字符串类型时(非数组类型),可以看着该字段的值在时列表中的任何一个元素即可.

当查询的字段是一个数组类型的值时: db.users.find({"favorites.cites":{"$in":["西安","东京"]}}).pretty();

当查询的值时数据类型时,只要该值包含数据中的任何一项即可.

$all :  查询值包含制定数据中的每一个元素的数据.

db.users.find({"favorites.cites":{"$all":["西安","东京"]}}).pretty();

当查询字段为非数组时: db.users.find({"username":{"$all":["lison"]}}).pretty();

可以看到如果数据包含多个值,时永远不可能成立的.当数组中包含一个值时,和 $eq 的用法相同.

上面讲讲了 $eq, $gt,$gte, $in ,$all, 那么有了这些正向的操作,必然有和其对应的反向操作.接下来,再讲其反向操作就很容易理解了

$ne :  查询不等于制定值的数据. 是$eq 的反向操作.

db.users.find({"username":{"$ne":"lison"}});

查询出用户名不等于lison的数据.

$lte :  小于等于指定值得数据,$gt  的反向操作.

$lt  : 小于指定值的数据 , $gte 的反向操作

$nin 不包含数组中的任何一项, $in 的 反向操作

db.users.find({"favorites.cites":{"$nin":["东京","西安"]}});

查询出喜欢的城市既不包含西安,也不包含东京的数据,与顺序无关.

至于$all 的反向操作符,目前笔者还未了解到. 但是可以借助其余的逻辑运算符进行关联出来

操作符的暂且更新至此,后续再次更新

mongoDB学习笔记(一)之操作符的更多相关文章

  1. MongoDB 学习笔记2----条件操作符

    条件操作符:用于两个比较两个表达式并从mongdb中获取文档 mongodb常见的操作符及解析说明 $lt:小于 example:ago<20 $lte:小于等于 example:<=20 ...

  2. MongoDB 学习笔记(原创)

    MongoDB 学习笔记 mongodb 数据库 nosql 一.数据库的基本概念及操作 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table ...

  3. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  4. 【转】MongoDB学习笔记(查询)

    原文地址 MongoDB学习笔记(查询) 基本查询: 构造查询数据. > db.test.findOne() { "_id" : ObjectId("4fd58ec ...

  5. MongoDB学习笔记:文档Crud Shell

    MongoDB学习笔记:文档Crud Shell   文档插入 一.插入语法 db.collection.insertOne() 将单个文档插入到集合中.db.collection.insertMan ...

  6. MongoDB学习笔记:MongoDB 数据库的命名、设计规范

    MongoDB学习笔记:MongoDB 数据库的命名.设计规范     第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...

  7. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  8. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  9. MongoDB学习笔记(转)

    MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...

随机推荐

  1. 和35岁刘阿姨一起自测 Python 流程控制基本功

    0.突然降临的困惑 流程控制语句.布尔值.布尔值操作符都属于 python 的基础功.大好周末我写这篇笔记,不是为了整理这些基础知识点,而是记录几个令我突然迷惑的代码段.--代码本身很简单,但即便已经 ...

  2. shell 字符串比较与脚本 too many arguments 报错

    一.问题 最近在写 shell 脚本的时候,遇到了一些小问题,就是我在判断一个字符串是否为空的时候经常报下面的错,程序是正常执行了,但是有这个提示很蛋疼,下面就是看看是什么问题导致的? [: too ...

  3. netty源码解析(4.0)-28 ByteBuf内存池:PooledByteBufAllocator-把一切组装起来

    PooledByteBufAllocator负责初始化PoolArena(PA)和PoolThreadCache(PTC).它提供了一系列的接口,用来创建使用堆内存或直接内存的PooledByteBu ...

  4. 使用Typescript重构axios(十八)——请求取消功能:总体思路

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  5. Flink中异步AsyncIO的实现 (源码分析)

    先上张图整体了解Flink中的异步io 阿里贡献给flink的,优点就不说了嘛,官网上都有,就是写库不会柱塞性能更好 然后来看一下, Flink 中异步io主要分为两种 一种是有序Ordered 一种 ...

  6. Hibernate的多对多关系

    1.表的关系: 分别有三个表:课程表.学生表.分数表.课程和学生的关系是多对多的,因为一个学生对应多个课程,而一个课程被多个学生选修.如果用一对多.多对一的观点来看待课程和学生的关系显然是不对的,因为 ...

  7. Ansibile之playbook初识

    一.playbook简介 ansiblie的任务配置文件被称为playbook,俗称“剧本”,每一个剧本(playbook)中都包含了一系列的任务,这每个任务在ansible中又被称为“戏剧”(pla ...

  8. Jenkins集群下的pipeline实战

    关于Jenkins集群 在<快速搭建Jenkins集群>一文中,我们借助docker快速搭建了Jenkins集群,今天就在这个集群环境中创建pipeline任务,体验Jenkins集群下的 ...

  9. linux环境中,两个不同网段的机器互通

    linux环境中,两个不同网段的机器互通   人评论3690人阅读2019-11-18 14:50:21   环境如下:   host1 单网卡 eth0 172.24.100.15/16   hos ...

  10. Conda/Miniconda/Anaconda 常用命令整理及介绍

    作者:HELO 出处:http://www.cnblogs.com/HELO-K 欢迎转载, 转载时请保留此声明, 谢谢! 在这里整理一份全一点的 Conda 常用命令, 方便大家日常使用时参考, 一 ...