热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据库查询高级使用指南

面向文档的NoSQL数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能。MongoDB几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。1.1条件查询,,,这个操作符就不用多解释了,最常

    面向文档的 NoSQL 数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能。

    MongoDB 几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

1.1 条件查询

<, <=, >, >= 这个操作符就不用多解释了,最常用也是最简单的

db.collection.find({ "field" : { $gt: value } } ); // 大于: field > value

db.collection.find({ "field" : { $lt: value } } ); // 小于: field

db.collection.find({ "field" : { $gte: value } } ); // 大于等于: field >= value

db.collection.find({ "field" : { $lte: value } } ); // 小于等于: field <= value

如果要同时满足多个条件,可以这样做

db.collection.find({ "field" : { $gt: value1, $lt: value2 } } ); // value1 1.2 $all 匹配所有

这个操作符跟 SQL 语法的 in 类似,但不同的是, in 只需满足( )内的某一个值即可, 而$all 必 须满足[ ]内的所有值,例如:

db.users.find({age : {$all : [6, 8]}});

可以查询出 {name: 'David', age: 26, age: [ 6, 8, 9 ] }

但查询不出 {name: 'David', age: 26, age: [ 6, 7, 9 ] }

1.3 $exists 判断字段是否存在

查询所有存在 age 字段的记录

db.users.find({age: {$exists: true}});

查询所有不存在 name 字段的记录

db.users.find({name: {$exists: false}});

1.4 Null 值处理

Null 值的处理稍微有一点奇怪 ,”null”不仅能找到它自身,连不存在该字段的记录页可以被找出来。所以我们要使用exits来限制。

db.c2.find({age:{"$in":[null], "$exists":true}})

1.5 $mod 取模运算

查询 age 取模 10 等于 0 的数据

db.student.find( { age: { $mod : [ 10 , 0 ] } } )

1.6 $ne 不等于

查询 x 的值不等于 3 的数据

db.things.find( { x : { $ne : 3 } } );

1.7 $in 包含

与 sql 标准语法的用途是一样的,即要查询的是一系列枚举值的范围内

查询 x 的值在 2,4,6 范围内的数据

db.things.find({x:{$in: [2,4,6]}});

1.8 $nin 不包含

与 sql 标准语法的用途是一样的,即要查询的数据在一系列枚举值的范围外

查询 x 的值在 2,4,6 范围外的数据

db.things.find({x:{$nin: [2,4,6]}});

1.9 $size 数组元素个数

对于{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }记录

匹配 db.users.find({favorite_number: {$size: 3}});

不匹配 db.users.find({favorite_number: {$size: 2}});

1.10 正则表达式匹配

查询不匹配 name=B*带头的记录

db.users.find({name: {$not: /^B.*/}});

1.11 Javascript 查询和$where 查询

查询 a 大于 3 的数据,下面的查询方法殊途同归

db.c1.find( { a : { $gt: 3 } } );

db.c1.find( { $where: "this.a > 3" } );

db.c1.find("this.a > 3");

f = function() { return this.a > 3; } db.c1.find(f);

1.12 count 查询记录条数

count 查询记录条数

db.users.find().count();

以下返回的不是 5,而是 user 表中所有的记录数量

db.users.find().skip(10).limit(5).count();

如果要返回限制之后的记录数量,要使用 count(true)或者 count(非 0)

db.users.find().skip(10).limit(5).count(true);

1.13 skip 限制返回记录的起点

从第 3 条记录开始,返回 5 条记录(limit 3, 5)

db.users.find().skip(3).limit(5);

1.14 sort 排序

以年龄升序 asc

db.users.find().sort({age: 1});

以年龄降序 desc

db.users.find().sort({age: -1});

2 游标

MongoDB 也是用游标来循环处理每一条结果数据 .

for( var c = db.t3.find(); c.hasNext(); ) {

printjson( c.next());

}

db.t3.find().forEach( function(u) { printjson(u); } );

3 存储过程

MongoDB 同样支持存储过程。关于存储过程你需要知道的第一件事就是它是用 Javascript 来

写的。

MongoDB 存储过程是存储在 db.system.js 表中的 。

下面我们将这个 sql 自定义函数转换为 MongoDB 的存储过程:

db.system.js.save({_id:"addNumbers", value:function(x, y){ return x + y; }});

查看存储过程:db.system.js.find()

调用存储过程:db.eval('addNumbers(3, 4.2)');


推荐阅读
  • 《Python3 网络爬虫开发实战》:高效实用的 MongoDB 文档存储
    NoSQL,全称NotOnlySQL,意为不仅仅是SQL,泛指非关系型数据库。NoSQL是基于键值对的,而且不需要经过SQL ... [详细]
  • 在Ubuntu中安装MongoDB
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 架构师必读:日均500万数据,如何进行数据存储选型?
    点击上方关注我,选择“置顶或者星标”作者:麦田里的老农来源:https:zhuanlan.zhihu.comp37964096小编公司有一 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 数据库基本介绍
    1、数据库基本知识概念:数据库:database(DB),是一种存储数据的仓库数据库是根据数据结构组织、存储和 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 一、前言在数据库中,慢查询日志通常是用来进行优化数据库,MySQL中存在慢查询,Mongodb中也是如此。在Mongo中的慢查询属于Mon ... [详细]
  • 1.淘宝模拟登录2.天猫商品数据爬虫3.爬取淘宝我已购买的宝贝数据4.每天不同时间段通过微信发消息提醒女友5.爬取5K分辨率超清唯美壁纸6.爬取豆瓣排行榜电影数据(含GUI界面版) ... [详细]
  • SeMITechnologies正在使用矢量搜索引擎Weaviate构建的内容。SeMI的首席执行官兼联合创始人BobvanLuijt说,它是一种独特的AI优先数据库,使用机器学习 ... [详细]
  • 数据库进入全新时代,腾讯云发布五大数据库提前布局
    8月28日,腾讯云数据库在京正式启动战略升级,宣布未来将聚焦云原生、自治、超融合三大战略方向,以用户为中心,联接未来。并在现场面向全球用户同步发布五大战略级新品,包括数据库智能管家 ... [详细]
  • Mongodb3.4 就开始支持Decimal 类型,解决double的精度问题,但是不太好用,MapReduce的时候Array.sum 也不能计算 Decimal.比较坑,但是聚合可以用 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
The-6ixth-Floor乐队
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有