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

MongoDB数据库的查询基础操作

1,find用法.查询就是返回一个集合中的文档的子集.查询的一般操作是使用find,若没有向find传递参数,默认的是显示所有文档db.blog.find(){_id:ObjectId(4f6e766e811cca6e90f0dab5),name:testmongo,age:20}.指定多个查询条件:

1, find 用法

.查询就是返回一个集合中的文档的子集

.查询的一般操作是使用find,若没有向find传递参数,默认的是显示所有文档

db.blog.find()

{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5"), "name" : "testmongo", "age" : 20 }

.指定多个查询条件:

db.blog.find("title":"hello", "name":"test")

.指定返回的键值

db.blog.find({},{"name":1})   #返回只包含一个键值"name"的所有记录

{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5"), "name" : "testmongo" }

可见无论指定哪些键,其中的_id键始终存在与查询结果中。

.过滤键值

db.blog.find({}, {"name":0})  //结果中不显示键name的值

{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5"), "age" : 20 }

.也可以两者结合

> db.blog.find({}, {"name":1, "age":1, "_id":0}) //只显示name和age的键/值
{ "name" : "testmongo", "age" : 20 }

2, 查询条件

"$lt","$lte","$gt","$gte" 是全部的比较操作,分别对应:<,<=,>,>=。可以将这些组合起来使用。 $ne是不等于的意思。

> db.blog.find({"age":{"$gte":18, "$lt":30}})   //查找年龄>18并且<30的记录

> db.blog.find({"age":{"$ne":20}})    //查询年龄不等于20的记录

$in 用来查询单一键和多个值的匹配。可以把多个值组织成一个数组。

> db.blog.find({"age":{"$in":[20,40]}})  //差选age为20或40的记录
{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5"), "name" : "testmongo", "age" : 20 }

 //查询age为20或40的记录,不输出_id键字段
> db.blog.find({"age":{"$in":[20,40]}},{"_id":0})

 { "name" : "testmongo", "age" : 20 }

.$in可以匹配不同类型的值,也可以匹配单个值

//查找名字为jack或20或40的记录

> db.blog.find({"name":{"$in":["jack",20,40]}}) 
{ "_id" : ObjectId("4f70f21e248df4040465dec5"), "name" : "jack", "age" : 80, "level" : 5 }
$nin和$in的用法相同,只不过它的意义相反,表示不在...范围

$or查询多个键值的任意给定值

#查询name为jack或age为20的记录

> db.blog.find({"$or":[{"name":"jack"}, {"age":20}]})
{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5"), "name" : "testmongo", "age" : 20 }
{ "_id" : ObjectId("4f70f21e248df4040465dec5"), "name" : "jack", "age" : 80, "level" : 5 }

$not

$mod

.关于null

#查找"commit"键的值为null的记录。但这样达不到预期效果,它不仅查出了commit为Null的记录,还查出了不存在commit键的记录,结果如下:

> db.blog.find({"commit":null})

{ "_id" : ObjectId("4f6e766e811cca6e90f0dab5"), "name" : "testmongo", "age" : 20 }
{ "_id" : ObjectId("4f70f8e1248df4040465dec8"), "name" : "test1", "age" : 30, "commit" : null }
#再次查找commit为null的记录
> db.blog.find({"commit":{"$in":[null], "$exists":true}})
{ "_id" : ObjectId("4f70f8e1248df4040465dec8"), "name" : "test1", "age" : 30, "commit" : null }
可以看到这次可以了。 $exists关键字表示是否存在的意思。
3,查询数组
数组可以看成是,每个元素的值都代表了整个键的值。
$all操作
#查询commit字段中,既包括t1又包括t2的记录
> db.blog.find({"commit":{$all:["t1","t2"]}})
{ "_id" : ObjectId("4f710330248df4040465dec9"), "name" : "tt", "commit" : [ "t1", "t2", "t3" ] }

4,$where查询

#查询blog集合中的键age的值大于40的记录,以下几种方法都可以:

> db.blog.find({$where:"this.age>40"})
> db.blog.find({age:{"$gt":40}})

> db.blog.find("this.age>40")

输出结果:

{ "_id" : ObjectId("4f70f21e248df4040465dec5"), "name" : "jack", "age" : 80, "level" : 5 }

5,游标

游标就是在查询出多个记录时,在多个记录中访问的指针:

#先插入记录

> for (i=0; i<100; i++) {
... db.c.insert({x:i});
... }

#使用游标

> for (var cur=db.c.find(); cur.hasNext(); ) {
... printjson(cur.next());
... }
{ "_id" : ObjectId("4f71c294317f1d737e698fec"), "x" : 0 }
{ "_id" : ObjectId("4f71c294317f1d737e698fed"), "x" : 1 }

5.1 limit函数

#显示查询结果的数量为不多于2条,:

> db.c.find().limit(2)    #2为记录的上限
{ "_id" : ObjectId("4f71c294317f1d737e698fec"), "x" : 0 }
{ "_id" : ObjectId("4f71c294317f1d737e698fed"), "x" : 1 }

5.2 skip (n)函数

#跳过n条记录,显示跳过以后剩下的记录。若mongodb中的记录小于n条,则不返回任何记录。

> db.c.find().skip(98)    #跳过前面的0-97条记录,从98号记录开始显示
{ "_id" : ObjectId("4f71c294317f1d737e69904e"), "x" : 98 }
{ "_id" : ObjectId("4f71c294317f1d737e69904f"), "x" : 99 }

注意:若要跳过大量的记录skip是很慢的,所以要尽量避免跳过大量记录,而用查询语句来代替。

5.3 sort函数

该函数多个记录进行排序操作,该函数的参数是一个或多个键/值对,键代表要排序的键名,值代表排序的方向,1是升序,-1是降序。

有时候一个键的值是多种类型的,这时需要有一个默认的顺序:

最小值,null,数字,字符串,文档,数组,二进制数,对象ID,日期,时间,正则表达式,最大值。


推荐阅读
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • MongoDB用户验证auth的权限设置及角色说明
    本文介绍了MongoDB用户验证auth的权限设置,包括readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、cluster相关的权限以及root权限等角色的说明和使用方法。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • step1.为mongodb添加admin管理员root@12.154.29.163:~#mongoMongoDBshellversionv3.4.2connectingto:mo ... [详细]
  • 一、前言在数据库中,慢查询日志通常是用来进行优化数据库,MySQL中存在慢查询,Mongodb中也是如此。在Mongo中的慢查询属于Mon ... [详细]
  • 1.淘宝模拟登录2.天猫商品数据爬虫3.爬取淘宝我已购买的宝贝数据4.每天不同时间段通过微信发消息提醒女友5.爬取5K分辨率超清唯美壁纸6.爬取豆瓣排行榜电影数据(含GUI界面版) ... [详细]
  • Abp+MongoDb改造默认的审计日志存储位置
    一、背景在实际项目的开发当中,使用AbpZero自带的审计日志功能写入效率比较低。其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起。所以我们可以重新实现A ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
author-avatar
凌晨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有