MongoDB-常用操作

MongoDB-常用操作

1、MongoDB-数据库命令
查看当前的数据库:db
查看所有的数据库:show dbs /show databases
切换数据库:use db_name
删除当前的数据库:db.dropDatabase()
2、MongoDB-集合命令
不手动创建集合: 向不存在的集合中第⼀次加⼊数据时, 集合会被创建出来
手动创建结合:
  db.createCollection(name,options)
  db.createCollection("stu")
  db.createCollection("sub", { capped : true, size : 10 } )
  参数capped: 默认值为false表示不设置上限,值为true表示设置上限
  参数size: 当capped值为true时, 需要指定此参数, 表示上限⼤⼩,当⽂档达到上限时, 会将之前的数据盖, 单位为字节
查看集合:show collections
删除集合:db.集合名称.drop()
3、MongoDB-常见数据类型
Object ID: ⽂档ID
String: 字符串, 最常⽤, 必须是有效的UTF-8
Boolean: 存储⼀个布尔值, true或false
Integer: 整数可以是32位或64位, 这取决于服务器
Double: 存储浮点值
Arrays: 数组或列表, 多个值存储到⼀个键
Object: ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档
Null: 存储Null值
Timestamp: 时间戳, 表示从1970-1-1到现在的总秒数
Date: 存储当前⽇期或时间的UNIX时间格式
4、MongoDB-插入文档
4-1、mongodb的插入
db.集合名称.insert(document)
例:
db.stu.insert({name:'gj',gender:1})
db.stu.insert({_id:"20170101",name:'gj',gender:1})
// 插入文档时,如果不指定_id参数, MongoDB会为文档分配一个唯一的ObjectId
4-2、mongodb的保存
db.集合名称.save(document) 如果文档的_id已经存在则修改,如果文档的_id不存在则添加
5、MongoDB-删除文档
5-1、MongoDB remove()函数是用来移除集合中的文档。
5-2、语法:
基本语法remove()方法如下
db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
5-3、参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。默认false
writeConcern :(可选)抛出异常的级别。
5-4、例:
db.myLimit.remove({"_id" : {$gt:0}},1)   
6、MongoDB-更新文档
6-1、MongoDB 使用 update() 和 save() 方法来更新集合中的文档。
6-2、语法:
update() 方法的基本语法如下
db.stu.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
6-3、语法中对应的参数介绍:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条录全部更新。
writeConcern :可选,抛出异常的级别。
6-4、例:
>db.stu.update({name:'hr'},{name:'mnc'}) 更新一条
>db.stu.update({name:'hr'},{$set:{name:'hys'}}) 更新一条
>db.stu.update({},{$set:{gender:0}},{multi:true}) 更新全部
7、MongoDB-查询文档
7-1、数据准备
{"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true }
{"name" : "⻩蓉", "hometown" : "桃花岛", "age" : 18, "gender" : false }
{"name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : false }
{"name" : "⻩药师", "hometown" : "桃花岛", "age" : 40, "gender" : true }
{"name" : "段誉", "hometown" : "⼤理", "age" : 16, "gender" : true }
{"name" : "段王爷", "hometown" : "⼤理", "age" : 45, "gender" : true }
{"name" : "洪七公", "hometown" : "华⼭", "age" : 18, "gender" : true }
7-2、MongoDB-简单查询
db.集合名.find():查询当前集合的数据信息。
db.集合名.findOne():查询当前集合的第一条数据信息。
pretty():结果显示在一个格式化的方式。
7-3、MongoDB-比较运算符:
等于: 默认是等于判断, 没有运算符
⼩于:$lt (less than)
⼩于等于:$lte (less than equal)
⼤于:$gt (greater than)
⼤于等于:$gte
不等于:$ne

查询年龄大于18的所有学生
db.stu.find({age:{$gte:18}})
7-4、MongoDB-AND的使用:
在 find() 方法,如果通过多个键分离',',那么 MongoDB 处理 AND 条件

语法:db.stu.find({key1:value1, key2:value2}).pretty()
7-5、MongoDB-OR的使用:
OR条件的基础上要查询文件,需要使用$or关键字。
>db.stu.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()
7-6、逻辑运算-AND和OR一起使用:
db.stu.find({
    key1:value1,
    $or:[
        {key1:value1},{key2:value2}
    ]
}).pretty()
7-7、MongoDB-范围运算符:
使⽤$in, $nin 判断数据是否在某个数组内
查询年龄为18、 28的学⽣
db.stu.find({age:{$in:[18,28,38]}})
7-8、MongoDB-正则表达式:
使⽤//或$regex编写正则表达式

查询sku以abc开头的数据
db.products.find({sku:/^abc/})

查询sku以789结尾的数据
db.products.find({sku:{$regex:'789$'}})

{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }
{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before line" }
{ "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" }
7-9、MongoDB-limit与skip方法:
⽅法limit(): 显示指定多少条数据
db.集合名称.find().limit(NUMBER)
查询2条学⽣信息
db.stu.find().limit(2)
⽅法skip(): 跳过指定多少条数据
db.集合名称.find().skip(NUMBER)
db.stu.find().skip(2)
同时使用
db.stu.find().limit(4).skip(5) 显示5-19条数据
或
db.stu.find().skip(5).limit(4)

db.stu.find().limit(10).skip(100):显示100-110条数据
7-10、MongoDB-自定义查询:
由于mongo的shell是一个js的执行环境 使⽤$where后⾯写⼀个函数, 返回满⾜条件的数据

查询年龄⼤于30的学⽣
db.stu.find({
  $where:function() {
  return this.age>30;}
})
7-11、MongoDB-投影:
在查询到的返回结果中, 只选择必要的字段
命令:db.集合名称.find({},{字段名称:1,...})
参数为字段与值, 值为1表示显示, 值为0不显 特别注意: 对于_id列默认是显示的, 如果不显示需要明确设置为0
db.stu.find({},{_id:0,name:1,gender:1})
7-12、MongoDB-排序:
⽅法sort(), ⽤于对 集进⾏排序
命令:db.集合名称.find().sort({字段:1,...})
参数1为升序排列 参数-1为降序排列

根据性别降序, 再根据年龄升序
db.stu.find().sort({gender:-1,age:1})
7-13、MongoDB-统计个数:
⽅法count()⽤于统计结果集中⽂档条数
命令:db.集合名称.find({条件}).count() 命令:db.集合名称.count({条件})
db.stu.find({gender:true}).count()
db.stu.count({age:{$gt:20},gender:true})
7-14、MongoDB-消除重复:
⽅法distinct()对数据进⾏去重
命令:db.集合名称.distinct('去重字段',{条件})
db.stu.distinct('hometown',{age:{$gt:18}})

MongoDB-练习

1、连接mongodb服务器:
mongo 1.1.1.1:1688   (也可以直接 mongo)
2、练习-数据库及表操作:
// 查看所有的数据库
show dbs

// 通过use关键字切换数据库
// 说明:在MongoDB中,数据库是自动创建的,通过use切换到新数据库中,进行插入数据即可自动创建数据库
use test

// 插入数据 此时会自动创建库及表
db.user.insert({id:1,name:'zhangsan'})

// 查看表
show tables
show collections

// 删除集合(表) ,如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。
db.user.drop()

// 删除数据库
use testdb #先切换到要删除的数据中
db.dropDatabase()  #删除数据库
3、练习-数据操作
3-1、数据插入:
// 插入数据
// 语法:db.表名.insert(json字符串)
db.user.insert({id:1,username:'zhangsan',age:20})
3-2、数据修改:
// 注意:如果这样写,会删除掉其他的字段
db.user.update({id:1},{age:25})

// 更新数据, 更新age 字段,
// 字段不存在增加age 字段
// 数据不存在,不新增,
db.user.update({id:1},{$set:{age:22}})
// 更新不存在的字段,会新增字段
db.user.update({id:2},{$set:{sex:1}}) #更新数据
// 更新不存在的数据,默认不会新增数据
db.user.update({id:3},{$set:{sex:1}})
// 如果设置第一个参数为true,就是新增数据
db.user.update({id:3},{$set:{sex:1}},true)
3-3、数据删除:
// 只删除找到的第一个数据
db.user.remove({age:22},true)
或
db.user.deleteOne({age:22})

// 删除找到的所有数据
db.user.remove({age:22})
或
db.user.deleteMany(({age:22}))

// 删除表中所有数据
db.user.remove({})
3-4、数据删除:
db.user.find()  #查询全部数据
db.user.find({},{id:1,username:1})  #只查询id与username字段
db.user.find().count()  #查询数据条数
db.user.find({id:1}) #查询id为1的数据
db.user.find({age:{$lte:21}}) #查询小于等于21的数据
db.user.find({$or:[{id:1},{id:2}]}) #查询id=1 or id=2

// 分页查询:Skip()跳过几条,limit()查询条数
db.user.find().limit(2).skip(1)  #跳过1条数据,查询2条数据
db.user.find().sort({id:-1}) #按照id倒序排序,-1为倒序,1为正序

posted on   cloud_wh  阅读(6900)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示