百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

MongoDB入门实操《二》(mongodb基本操作)

wptr33 2025-05-02 13:51 4 浏览

常规命令使用


首先我们来了解几个概念,虽然MongoDB入门实操《上篇》这篇文章已经提到过,这里再次加深印象:
集合:Mongo 中的集合就是mysql 的表的表现形式
文档:文档的数据结构和JSON 基本一样,它就是集合(表)中的一条记录,相当于mysql 的行row
字段:Mongo 中的field 相当于mysql 中的column
索引:Mongo 中的index 与mysql 的index 一样
主键:Mongo 中的primary key 与mysql 的一样,其中Mongo 中将_id 自动设置为主键


向集合中插入数据


有两种方式,注意一下插入的数据格式 insert and save,如下:

> db.test.insert({"name":"tony","age":23,"job":"tester"})
WriteResult({ "nInserted" : 1 })
> db.test.save({"name":"tom","age":29,"job":"developer"})
WriteResult({ "nInserted" : 1 })
> db.test.find()
{ "_id" : ObjectId("5eecc55ec2e3725b5715931b"), "name" : "tony", "age" : 23, "job" : "tester" }
{ "_id" : ObjectId("5eecc5a3c2e3725b5715931c"), "name" : "tom", "age" : 29, "job" : "developer" }


删除集合中的数据

> db.test.remove({"name":"jim"})
WriteResult({ "nRemoved" : 1 })


修改集合中的数据

> db.test.update({"name":"tony"},{$set:{"age":30}}) #只更新第一条记录,name=tony 的age 修改为30
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.update({"name":"tony"},{$set:{"age":30}},false,true ); #满足条件的全部更新

备注:上一条命令中false and true 解释:

  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新


查询集合中的数据

> db.test.find({"age":{$gt:29}}) #查询age 大于29的文档
{ "_id" : ObjectId("5eecc55ec2e3725b5715931b"), "name" : "tony", "age" : 33, "job" : "tester" }
备注:
MongoDB中条件操作符有:
* (>) 大于 - $gt
* (<) 小于 - $lt
* (>=) 大于等于 - $gte
* (<= ) 小于等于 - $lte (大家可以多去练习)



> db.test.find({"name":{$in:["tony","tom"]}}) #类似mysql 里面的in 操作查询
{ "_id" : ObjectId("5eecc55ec2e3725b5715931b"), "name" : "tony", "age" : 33, "job" : "tester" }
{ "_id" : ObjectId("5eecc5a3c2e3725b5715931c"), "name" : "tom", "age" : 29, "job" : "developer" }



> db.test.find({"name":"tom","age":29}) #这种就是mysql 里面的 name='tom' and age=29 
{ "_id" : ObjectId("5eecc5a3c2e3725b5715931c"), "name" : "tom", "age" : 29, "job" : "developer" }



> db.test.find({$or:[{"name":"tom"},{"age":33}]}) #这种就是mysql 里面的 name='tom' or age=33
{ "_id" : ObjectId("5eecc55ec2e3725b5715931b"), "name" : "tony", "age" : 33, "job" : "tester" }
{ "_id" : ObjectId("5eecc5a3c2e3725b5715931c"), "name" : "tom", "age" : 29, "job" : "developer" }



$type操作符是基于集合中对应的数据类型,并返回结果。
> db.test.find() #这是现有的数据
{ "_id" : ObjectId("5eecc55ec2e3725b5715931b"), "name" : "tony", "age" : 33, "job" : "tester" }
{ "_id" : ObjectId("5eecc5a3c2e3725b5715931c"), "name" : "tom", "age" : 29, "job" : "developer" }
{ "_id" : ObjectId("5eeccc7b613abf5d90d640a2"), "name" : "kim", "age" : 39, "job" : "developer" }
{ "_id" : ObjectId("5eeccd88613abf5d90d640a3"), "name" : "jim", "age" : "39", "job" : "developer" }



> db.test.find({"age":{$type:"string"}}) #这里要求只查询出age 字段值是string 类型的数据
{ "_id" : ObjectId("5eeccd88613abf5d90d640a3"), "name" : "jim", "age" : "39", "job" : "developer" }
> db.test.find({"age":{$type:2}}) #2 和 string 是同一种表示,两种不同方式
{ "_id" : ObjectId("5eeccd88613abf5d90d640a3"), "name" : "jim", "age" : "39", "job" : "developer" }



> db.test.find({"age":{$type:1}}) #1 表示是数字类型,也可以用Double 来代替
{ "_id" : ObjectId("5eecc55ec2e3725b5715931b"), "name" : "tony", "age" : 33, "job" : "tester" }
{ "_id" : ObjectId("5eecc5a3c2e3725b5715931c"), "name" : "tom", "age" : 29, "job" : "developer" }
{ "_id" : ObjectId("5eeccc7b613abf5d90d640a2"), "name" : "kim", "age" : 39, "job" : "developer" }


limit() 方法的使用,这也相当于是mysql 里面的limit 用法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
> db.test.find({"age":{$type:1}}).limit(1)
{ "_id" : ObjectId("5eecc55ec2e3725b5715931b"), "name" : "tony", "age" : 33, "job" : "tester" }


skip()方法可以用来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
> db.test.find({"age":{$type:1}}).skip(1) #跳过第一条记录数据,默认情况下skip() 参数为0
{ "_id" : ObjectId("5eecc5a3c2e3725b5715931c"), "name" : "tom", "age" : 29, "job" : "developer" }
{ "_id" : ObjectId("5eeccc7b613abf5d90d640a2"), "name" : "kim", "age" : 39, "job" : "developer" }


limit() 与 skip() 方法联合使用:
> db.test.find({"age":{$gt:29}}).skip(1).limit(3)
{ "_id" : ObjectId("5eeccc7b613abf5d90d640a2"), "name" : "kim", "age" : 39, "job" : "developer" }
{ "_id" : ObjectId("5ef74025613abf5d90d640a4"), "name" : "jeffy", "age" : 40, "job" : "developer" }
{ "_id" : ObjectId("5ef74035613abf5d90d640a5"), "name" : "jeee", "age" : 35, "job" : "developer" }
上面这条命令的操作相当于mysql 的 select * from test where age>29 limit 1,3;

总结:今天主要分享了MongoDB 中常见的操作增、删、改和查操作,这将有利于我们快速的进入到MongoDB 的世界中去。

相关推荐

Spring和SpringBoot到底有什么区别

一提到Spring和SpringBoot的区别,大部分人第一反应就是SpringBoot是Spring的框架,那具体的区别在哪里呢?为什么现在开发都用SpringBoot呢?...

Spring Boot3.0升级,踩坑之旅,附解决方案

本文基于newbeemall项目升级SpringBoot3.0踩坑总结而来,附带更新说明:...

Java常用框架,你用过几款?(java使用的框架)

作为头牌编程语言,Java的火爆程度已经毋庸置疑,Java框架在Java开发中有着不可忽视的重要地位。今天就给大家具体介绍一下Java常用框架,希望对正在学习Java的小伙伴有所帮助。框架、设计模式框...

2021年超详细的java学习路线总结—纯干货分享

本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础...

Nginx+SpringBoot实现负载均衡(nginx负载均衡的实现)

作者:虚无境出处:http://www.cnblogs.com/xuwujing前言在上一篇中介绍了Nginx的安装,本篇文章主要介绍的是Nginx如何实现负载均衡。负载均衡介绍介绍在介绍Nginx的...

Spring Boot 运行原理(5分钟速解)

SpringBoot...

SpringBoot+LayUI后台管理系统开发脚手架

源码获取方式:关注,转发之后私信回复【源码】即可免费获取到!项目简介本项目本着避免重复造轮子的原则,建立一套快速开发JavaWEB项目(springboot-mini),能满足大部分后台管理系统基础开...

java轻松玩转Excel之EasyExcel(java做excel)

项目地址:https://github.com/PiKeZhao/excel-model.git如果您对该项目有什么问题加群咨询哦978219630(各类电子书籍,学习视频等)大家常用Apache...

开源一套简单通用的后台管理系统(开源系统靠什么赚钱)

  前言  前段时间我们写一个简单的后台模板SpringBoot系列——Security+Layui实现一套权限管理后台模板<...

VUE简介(vue简介和特点)

一.前后端分离既然我们在开发中使用前后端分离模式,也就是前端拿到后端的数据时怎么处理,怎么输出都有前端自己来实现,这样就需要写大量的js代码,而为了简化js的代码,就衍生出了很多的框架,比如jquer...

聊聊如何对eureka管理界面进行定制化改造

前言在nacos还未面世之前,eureka基本上就是springcloud全家桶体系注册中心的首选,随着nacos的横空出世,越来越多基于springcloud的微服务项目采用nacos作为注册中心,...

newbee-mall开源免费java商城系统

简介newbee-mall项目(新蜂商城)是一套电商系统,包括newbee-mall商城系统及newbee-mall-admin商城后台管理系统,基于SpringBoot2.X及相关...

入职阿里巴巴,成为年薪百万阿里P7高级架构师需要必备哪些技术栈

大家都知道,阿里P7高级技术专家,基本上是一线技术人能达到的最高职级,也是很多程序员追求的目标。达到年入百万的P7Java高级架构师级别,不仅要具备优秀的编程能力和系统设计能力,在技术视野和业务洞...

学完SSM框架就可以成为Java程序员了?要找到工作还需要这些技术

Java语言是学习人数最多的语言,没错,应用领域的优势和就业薪资的吸引是不少人关注Java语言的理由。但其实Java也是一门“宽进严出”的编程语言,想成为Java高手并不容易。那么学到什么程度才能出师...

SpringCloud系列——SSO 单点登录

  前言  作为分布式项目,单点登录是必不可少的,文本基于之前的的博客(猛戳:SpringCloud系列——Zuul动态路由,SpringBoot系列——Redis)记录Zuul配合Redis实现一...