MongoDB的基本使用

2023-11-11

基本操作
./mongod -f mongodb.conf # 启动mongodb
./mongo  # 进入到mongodb控制台
db.shutdownServer() # 关闭服务[user admin]
db.createUser({user:"root",pwd:"root",roles[{role:"userAdminAnyDatabase", db:"admin"}]}) # user用户名,pwd密码,role角色,db应用在哪个数据库
db.auth("root", "123")
show dbs # 查看所有的数据库
user xxx # 切换数据库
db.sang_collec.insert({x:1}) # 向xxx中的sang_collec集合中插入一条数据
db.sang_collec.insertMany([{x:1}, {x:2}, {x:3}]) # 插入多条数据
db.sang_collec.findOne() #查看一个文档
db.sang_collec.find() #查看所有文档
db.sang_collec.update({x:1},{x:999}) # 将x:1改为x:999
db.sang_collec.remove({x:999}) # 移除x:999
默认使用的是64位浮点型数值
db.sang_collec.insert({x:NumberInt(10)}) # 插入整型值
db.sang_collec.insert({x:NumberLong(12)})
db.sang_collec.insert({x:"hello MongoDB!"}) #直接插入字符串
db.sang_collec.insert({x:[1,2,3,4,new Date()]}) # 插入数组
db.sang_collec.insert({x:new Date()}) # 插入日期
db.sang_collec.insert({name:"三国演义",author:{name:"罗贯中",age:24}}) # 插入内嵌文档
db.sang_collec.find({x:/^(hello)(.[a-zA-Z0-9])+/i}) # 利用正则表达式查询
db.sang_collec.insert({x:function f1(a,b)(return a+b)}) # 插入JavaScript代码

####################################

文档更新操作
db.sang_collec.insert({name:"三国演义",authorName:"罗贯中",authorGender:"男",authorAge:24.0}) # 插入数据
var book = db.sang_collec.findOne({name:"三国演义"}) # 查找三国演义并返回给book
book.author={name:book.authorName,gender:book.authorGender,age:book.authorAges} # 向book中添加元素,新的节点值为旧值
delete book.authorAge
delete book.authorGender
delete book.authorName

db.sang_collec.update({x:1},{$set:{x:99}},false,true) # 将所有的x:1改为x:99, 第一个false表示如果不存在update记录,是否我们要将更新的文档插入作为一个新文档。第二个true表示是否要更新到全部查到的文档
$set修改器:用来修改一个字段的值,如果这个字段不存在,则创建它
db.sang_collec.insert({x:1,y:2,z:3})
db.sang_collec.update({x:1},{$set:{x:99}}) # 只修改x:1为x:99,其他的不变
db.sang_collec.update({x:99}, {$set:{i:99}}) # 没有匹配到则添加
db.sang_collec.update({x:99}, {$unset:{i:99}}) # 删除字段
db.sang_collec.update({name:"三国演义"},{$set:{"author.name":"明代罗贯中"}}) # 只修改author.name这个字段中的值
$inc修改器:用来增加已有键的值,如果该键不存在就新建一个。
db.sang_collec.update({name:"三国演义"},{$inc:{"author.age":1}}) #给年龄增加1岁
数组修改器
db.sang_collec.update({name:"三国演义"},{$push:{comments:"好书"}}) # $push:向已有数组末尾添加元素,要是不存在就创建一个数组
db.sang_collec.update({name:"三国演义"},{$push:{comments:{$each:["111","222","333"]}}}) # 插入多个数据
db.sang_collec.update({name:"三国演义"},{$push:{comments:{$each:["444","555"],$slice:-5}}}) # $slice来固定数组的长度,如果不足5个就全部保留,如果超过5个,则只会保留最新的5个
db.sang_collec.insert({class:"研二"})
db.sang_collec.update({class:"研二"},{$push:{students:{$each:[{name:"张一百",score:100},{name:"张九九",score:99},{name:"张九八",score:98}],$slice:5,$sort:{score:-1}}}}) # $score对数据进行排序,按照成绩降序排列, -1降序,1升序
db.sang_collec.update({name:"三国演义"},{$addToSet:{comments:"好书"}}) # $addToSet表示要插入的值如果存在则不插入,否则插入
db.sang_collec.update({name:"三国演义"},{$pop:{comment:1}}) # $pop用来删除数组中的数据,1表示删除末尾,-1表示删除开头的一条数据
db.sang_collec.update({name:"三国演义", {$pull:{comments:"444"}}}) # $pull用来按条件删除数组中的某个元素
db.sang_collec.update({name:"三国演义"}, {$set:{"comments.0":"999"}}) # 将下标为0的comments修改为999
db.sang_collec.update({comments:"333"}, {$set:{"comments.$":"333-1"}}) # 查询条件查出来333,然后将之修改

#####################################

文档查询操作
db.sang_collec.insertMany([{name:"zs", score:100.0}, {name:"ls", score:90.0}, {name:"ww", score:70.0}, {name:"zl", score:80.0}])
db.sang_collec.find({score:{$lte:100, $gte:90}})  #查询score大于等于90,小于等于100的。 $lt < ; $lte <= ;  $gt > ; $gte >= ; $ne !=;
db.sang_collec.find({x:{$in:[1,2]}}) # $in查询x为1或者2的所有文档
db.sang_collec.find({x:{$nin:[1,2]}}) # $nin查询x不为1或者2的所有文档
db.sang_collec.find({$or:[{x:1}, {y:99}]}) # $or查询x为1或者y为99的文档
db.sang_collec.find({x:{$type:1}}) # $type:根据x的类型查询,1表示Double类型,2表示String类型....
db.sang_collec.find({x:{$not:{$type:1}}}) # $not取反操作
db.sang_collec.find({$and:[{y:{$gt:98}},{y:{$lt:100}}]}) # $and类似于and操作
db.sang_collec.find({y:{$lt:100, $gt:98}})

db.sang_collec.find({z:null}) # 查询z为null的数据,不存在z字段的文档也会被查出来
db.sang_collec.find({z:{$in:[null], $exists:true}}) # 查询z为null的数据,不存在z字段的不会被查出来
数组查询
db.sang_collec.insert({books:["三国演义","水浒传","红楼梦"]})
db.sang_collec.find({books:"三国演义"}) # 查询还有三国演义的文档
db.sang_collec.find({books:{$all: ["三国演义","红楼梦"]}}) # 查询包括三国演义和红楼梦的文档
db.sang_collec.find({"books.1":"水浒传"}) # 查询下标1为水浒传的文档
db.sang_collec.find({books:{$size:3}}) # 查询数组长度为3的文档
db.sang_collec.find({},{books:{$slice:2}}) # 查询数组中的前两条数据

db.sang_collec.insert({x:[5.0, 25.0]})
db.sang_collec.find({x:{$lt:20, $gt:10}}) # 查询10-20之间的文档,发现上边查询的还被查出来了,这是因为5<20,而25>10
db.sang_collec.find({x:{$elemMatch:{$lt:20, $gt:10}}})

db.sang_collec.insertMany([{x:1.0}, {y:{z:2.0, k:3.0}}])
db.sang_collec.find({y:{z:2, k:3}})
db.sang_collec.find({"y.z":2, "y.k":3}) # 更加灵活

var cursor = db.sang_collec.find();  # 利用游标进行遍历
while(cursor.hasNext()){
  print(cursor.next())
}
cursor.forEach(function(x){
  print(x)
})

var cursor = db.sang_collec.find().limit(3) # 查询前三条结果
var cursor = db.sang_collec.find().skip(2).limit(4) # 获取到2-5条记录
var cursor = db.sang_collec.find().sort({x:-1}) # 按x排序

#####################################

索引创建
db.sang_collec.getIndexes()  # 查看一个集合中的索引
db.sang_collec.ensureIndex({x:1}, {name:"myfirstindex"}) # 给x字段添加索引,1表示升序,-1表示降序

# dropDups:表示创建唯一性索引时如果出现重复,则将重复的删除,只保留一个
# background是否在后台创建索引,在后台创建索引不影响数据库当前的操作,默认为false
# unique是否创建唯一索引,默认false
# sparse对文档中不存在的字段是否不起用索引,默认false
# v表示索引的版本号,默认为2
# weights表示索引的权重
db.sang_collec.ensureIndex({x:1},{name:"myfirstindex",dropDups:true,background:true,unique:true,sparse:true,v:1,weights:99999})
查看索引
db.sang_collec.getIndexes()
db.sang_collec.totalIndexSize() # 查看索引的大小
删除索引
db.sang_collec.dropIndex("xxx") # 按照索引的名称xxx删除指定索引
db.sang_collec.dropIndexes() # 删除所有的索引
复合索引
db.sang_collec.ensureIndex({x:1, y:-1})
过期索引
db.sang_collec.ensureIndex({time:1}, {expireAfterSeconds:30}) # 过期索引,索引过期之后对应的数据会被删除
全文索引
# 不支持中文
db.sang_collect.ensureIndex({x:"text"})  # 建立一个全文索引
db.sang_collect.find({$text:{$search:"Java"}}) # 查询包含java的问大哥
db.sang_collect.find({$text:{$search:"\"Java C#\""}}) # 查询包含Java和C#的文档
db.sang_collect.find({$text:{$search:"PHP Python"}}) # 查询包含PHP或Python的文档
db.sang_collect.find({$text:{$search:"PHP Python -Java"}}) # 查询包含PHP或Python,但不包括Java的文档
db.sang_collect.find({$text:{$search:"PHP Python"}},{score:{$meta:"textScore"}}) # 查询结果相似度
db.sang_collect.find({$text:{$search:"PHP Python"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}}) # 查询结果相似度并按照相似度进行排序
地理空间索引
# 2d索引:用来存储和查找平面上的点
db.sang_collect.insert({x:[90,0]})  
db.sang_collect.ensureIndex({x:"2d"}) # 创建2d索引
db.sang_collect.find({x:{$near:[90,0]}}) # 查询该点附近的点,默认是100个 
db.sang_collect.find({x:{$near:[90,0],$maxDistance:99}}) # $maxDistance甚至额返回的最远距离
db.sang_collect.find({x:{$geoWithin:{$box:[[0,0],[91,1]]}}}) # $geoWithin查询某个形状内的点,$box表示矩形
db.sang_collect.find({x:{$geoWithin:{$center:[[0,0],90]}}}) # 查询圆中的点,参数分别表示圆的圆心和半径
db.sang_collect.find({x:{$geoWithin:{$polygon:[[0,0],[100,0],[100,1],[0,1]]}}}) # 查询多边形中的点
2d Sphere索引:是哦也能够与球面类型的地图,它的数据格式是GeoJSON类型的
db.sang_collect.ensureIndex({location:"2dsphere"})

########################################

固定集合
db.createCollection("my_collect", {cpdd:true, size=10000, max:100}) # capped:true表示该集合为一个固定大小的集合,size表示集合大小,max表示集合中文档的最大数量
db.runCommand({convertToCapped:"sang_collec", size:10}) # 将一个普通集合转换为固定集合
固定集合的自然排序
# 固定集合中的文档是按照文档被插入的顺序保存的,自然顺序也就是文档的插入顺序
db.sang_collce.find().sort({$natural:1})

#######################################

管道操作
# $match
db.sang_collec.aggregate({$match:{author:"杜甫"}}) # 获取集合中所有author为"杜甫"的文档

# $project:用来提取想要的字段
db.sang_collec.aggregate({$project:{title:1,_id:0}}) # 1表示要该字段,0表示不要该字段
db.sang_collec.aggrgate({$project:{"articleTitle","$title"}}) # 将title重命名为articleTitle

db.sang_collec.insert({orderAddressL:"ShenZhen", prodMoney:45.0, freight: 13.0, discounts: 3.0, orderDate: ISODate("2017-10-31T09:27:17.342Z"), prods:["可乐", 奶茶]})
db.sang_collec.aggregate({$project:{totalMoney:{$add:["$prodMoney","$freight"]}}}) # 商品费+运费
db.sang_collec.aggregate({$project:{totalPay:{$subtract:[{$add:["$prodMoney","$freight"]},"$discounts"]}}}) # 总费用-折扣
db.sang_collec.aggregate({$project:{"年份":{$year:"$orderDate"},"月份":{$month:"$orderDate"},"一年中第几周":{$week:"$orderDate"},"日期":{$dayOfMonth:"$orderDate"},"星期":{$dayOfWeek:"$orderDate"},"一年中第几天":{$dayOfYear:"$orderDate"},"时":{$hour:"$orderDate"},"分":{$minute:"$orderDate"},"秒":{$second:"$orderDate"},"毫秒":{$millisecond:"$orderDate"},"自定义格式化时间":{$dateToString:{format:"%Y年%m月%d %H:%M:%S",date:"$orderDate"}}}}) # 提取出来时间

db.sang_collec.aggregate({$project:{addr:{$substr:["$orderAddressL",0,2]}}})  # 字符串的截取操作
db.sang_collec.aggregate({$project:{test:{$cmp:["$freight","$discounts"]}}})  # 比较两个数字的大小
```shell
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB的基本使用 的相关文章

  • 为什么我的多螺纹嵌件比单螺纹嵌件性能更好?

    我调查了并发性 http docs mongodb org manual faq concurrency how granular are locks in mongodb在 MongoDB 中 显然它使用了数据库级锁定系统 我认为这意味着
  • 处理从nodejs到mongo db的连接丢失

    当nodejs和mongodb服务器之间的连接丢失时 我试图得到 连接丢失 或类似的信息 我使用本机驱动程序并具有以下代码 var mongo require mongodb var server new mongo Server host
  • 猫鼬中的数组过滤器

    将查询转换为节点 arrayfilter 在 mongoose 中工作的版本或者如何在节点应用程序中运行它们 db getCollection student update id ObjectId 5a377d62d21a3025a3c3a
  • 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

    我正在考虑向 Meteor 应用程序添加全文搜索 我知道 MongoDB 现在支持此功能 但我对实现有一些疑问 启用文本搜索功能的最佳方法是什么 textSearchEnabled true 在 Meteor 应用程序中 有没有办法添加索引
  • Mongo 正则表达式用于“不匹配”或反向[重复]

    这个问题在这里已经有答案了 我的 mongo 文档都包含一个名为templateName 有一些包含该值的文档 a SystemDefaultTemplate b SystemDefaultTemplate c SystemDefaultT
  • 我需要显式关闭连接吗?

    我持有一个实例MongoClient and DB在我的应用程序中 每次我想执行某些操作时 我都会调用getCollection 我想知道是否需要显式关闭连接 就像connection close 在 JDBC 中 强调一下 我只有一个Mo
  • 最新 .Net MongoDb.Driver 的连接问题

    我创建了一个 MongoLab 沙箱数据库 我与 MongoChef 连接 效果很好 我通过 Nuget 安装了 MongoDB Driver 2 2 2 我编写了一些简单的 C 演示代码 但就是无法使其工作 连接字符串是直接从 Mongo
  • 将 ObjectId 字段正确映射到字符串

    我正在对 RDBMS 世界进行一些探索 进入 MongoDB 的神秘海洋 我正在使用 Spring Data 来帮助我进行冒险 我需要在两个集合中的文档之间创建手动引用 我读到 DBRef 很昂贵 我的 pojo 是这样的 public c
  • Mongodb聚合管道大小和速度问题

    我正在尝试使用 mongodb 聚合查询来连接 lookup 两个集合 然后对连接数组中的所有唯一值进行不同计数 注意 我不一定知道metaDataMap 数组中有哪些字段 键 我不想计算或包含地图中可能存在或不存在的字段 这就是聚合查询看
  • mongodb/node.js 中单文档并发读写操作的问题

    编辑 6 15我尝试运行相同的代码 在调用之前添加延迟 doSafePush 再次收到 ConcurrencyDBError 时 即执行return when resolve wait delay 35 then function doSa
  • MongoDB 更新。尝试从一个字段的属性设置另一个字段

    我想做的事情非常简单 但我不知道如何为一个字段赋予另一个字段的值 我只想用另一个字段的字符数更新一个字段 db collection update exists true set field1 field2 length 我试过给它点符号
  • 是否可以将 mongodb 与 sqlalchemy 一起使用?

    我在中找不到任何有关连接 mongodb 的信息sqlalchemy 的文档 http docs sqlalchemy org en latest 和谷歌搜索 是否可以将 mongodb 与 sqlalchemy 一起使用 谢谢 根据 sq
  • 如何在猫鼬中使用聚合

    如何在 mongoose 中定义以下 MongoDB 聚合查询 db contacts aggregate group id code Code name Name 查询的目的是获取不同代码和名称的列表 我当前的模型代码是 use stri
  • 从 mongo shell 查找 mongoDB 上 2 个文档之间的差异

    我正在使用 mongodb 2 4 4 我想比较 2 个文档 然后仅使用 mongo shell 打印它们的差异 有没有办法比较它们 就像是 db collection compare first doc objectID blablalb
  • Mongoose:转换为 ObjectId 失败

    我正在尝试在 MongoDB 中创建一个类别层次结构 以便通过 Mongoose 与 Node js 一起使用 我正在使用祖先数组方法 http docs mongodb org manual tutorial model tree str
  • 按日/月分组,并取 mongo 中当天/月评分的平均值

    我在 mongodb 中有这些数据 rating 4 ceatedAt ISODate 2016 08 08T15 32 41 262 0000 rating 3 createdAt ISODate 2016 08 08T15 32 41
  • 在 config.js 中打开 admin 以查看服务器统计信息

    拉动后运行此命令 docker run d p 27017 27017 e MONGO INITDB ROOT USERNAME admin e MONGO INITDB ROOT PASSWORD password name mongod
  • Mongoose查询结果是只读的吗?

    如何修改 Mongoose 查询返回的对象 假设我们有以下模式 var S new mongoose Schema name String field String 我对结果进行了以下查询和修改 var retrieve function
  • MongoDB 将数字转换为科学计数法的字符串

    我想获得完整的号码String 但反而 1490650000000 它返回科学计数法 1 49065e 12 这是我尝试转换它的方法 substr myNumber 0 1 有什么想法如何预防吗 Note 我使用的是v3 6 无法升级使用
  • 致命错误 - 未找到“Mongo”类

    我正在尝试执行此操作 但我收到以下错误 致命错误 在 C wamp www 中找不到类 Mongo Info PHP 5 38 MongoDB mongodb win32 i386 2 0 2 MongoDB PHP 驱动程序 mongo

随机推荐

  • c++基础十一(跳转语句)

    跳转语句 1 break 2 continue 3 goto 1 break 作用 跳出循环结构和选择结构 1 switch语句中 用于终止case并跳出switch语句 2 在循环结构中 用于跳出当前循环 3 在嵌套循环语句中 跳出最近的
  • 企业微信 => 接入第三方vue应用 第三阶段:企业微信使用JSSDK

    目录 使用说明 官方文档不会告诉你的内容 都是会踩的坑 一 我采用的混入方法去使用这个官方SDK 二 可能会遇到的坑 前提 我们开发的是三方应用 不是内部应用 使用说明 所有的JS接口只能在企业微信应用的可信域名下调用 包括子域名 且可信域
  • 深度学习环境搭建( Tensorflow & PyTorch)

    前言 硬件配置 基础软件 1 安装VC redist x64 2 安装显卡驱动并确定算力 3 确认cuda版本 4 安装CUDA 配置cudnn 5 安装Anaconda 6 安装PyCharm 深度学习框架Tensorflow安装 深度学
  • 复习之linux系统中的权限管理

    1 权限的查看及读取 1 权限的查看 ls l file 查看文件的权限 ls ld dir 查看目录权限 2 权限的读取 文件的属性叫做文件的元数据 元数据 Metadata 又称中介数据 中继数据 为描述数据的数据 data about
  • HTML爱心表白代码,亲测有效,独一无二!福利来啦!

    发福利啦 小编最近搜集了好几个表白代码 感兴趣可以点进主页看看哟 如果觉得文章不错 还请一键三联 不定时发布各种全免费的独一无二的代码 这次我们来分享跳动的爱心的代码 网上有很多 但是个人觉得我这个比较温馨一点 背景也好看
  • springboot框架介绍,让我们深入的了解

    Spring Boot是一种用于快速构建基于Spring框架的Java应用程序的开源框架 它旨在简化Spring应用程序的开发过程 通过提供一种约定优于配置的方式 让开发人员能够快速搭建起一个可独立运行的 可部署的 易于扩展的应用 Spri
  • Java的内存机制

    1 Java的内存机制 Java 把内存划分成两种 一种是栈内存 另一种是堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配 当在一段代码块定义一个变量时 Java 就在栈中为这个变量分配内存空间 当超过变量的
  • 虚拟化一、虚拟化技术基础原理

    一 虚拟化 虚拟化 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机 在一台计算机上同时运行多个逻辑计算机 每个逻辑计算机可运行不同的操作系统 并且应用程序都可以在相互独立的空间内运行而互不影响 从而显著提高计算机的工作效率 虚拟化使用软
  • java字符串转json

    针对不同jar包 一 import org json JSONObject JSONObject jo new JSONObject new String 需要转换的字符串 二 import com alibaba fastjson JSO
  • 巧用机器学习定位云服务器故障

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由roganhuang 发表于云 社区专栏 导语 随着腾讯云业务的扩大 母机数量越来越多 为减少人力并实现母机故障的自动化定位 本文尝试利用机器学习算法 通过对历史故障母机的日志
  • 在钉钉上怎么手写_钉钉群上课入门和独家进阶功能(图文)

    钉钉群上课入门和独家快速进阶 在钉钉上有两种视频连接方式 直播和视频会议 两者各有利弊 前者合适人数较多 超过两百人 的时候进行 后者适合一个班级进行上课 下面就两者之间的具体操作说明 文中图片皆可点击放大 一 直播 手机 只有手机怎么直播
  • mysql的连接路径_Mysql 连接路径 url 参数解析

    1 mysql url 参数解析 url jdbc mysql 127 0 0 1 3306 user useUnicode true characterEncoding utf8 useUnicode characterEncoding
  • Webpack构建多页应用Mpa(三):文件结构和自动化打包

    本系列教程整体完成后 会完成一个可用的MPA应用 教程实际就是整个MPA的实现过程的记录 如果是想了解单项功能的实现 请继续往下看 如果是想了解整个MPA的开发和思考过程 建议从 Webpack构建多页应用Mpa 一 阐述设计概要 教程开始
  • 方法:sorttable.js用法

    转至 用sorttable js对表格进行排序 对表格进行排序的实现步骤 第一 下载sorttable js 链接 http www kryogenix org code browser sorttable 不需要jquery js 第二
  • castep 编译安装说明

    科学计算软件编译安装方法说明 castep 篇 提供免费TEST QQ 178068275 1 什么是 castep CASTEP Cambridge Sequential Total Energy Package 的缩写 是一个基于密度泛
  • CNN,RNN,LSTM,GRU的前后向传播算法(梯度是怎么更新的)

    目录 1 简单的梯度计算 2 进阶的梯度计算 3 CNN前向后向算法 4 RNN前向后向算法
  • JavaFx中的Image和ImageView

    image 要转换成ImageView 对象才可以添加到结点中 Override public void start Stage stage stage setTitle 测试窗口 Pane pane new Pane Scene scen
  • 打表法经典2题:小于n的质数和第k个丑数

    1 求小于n的所有质数 1 开一个大小为n的bool数组A 下标代表整数 值true代表被mark过 有因子 非素数 2 i 从 2开始到n 1 如果A i 没被mark A i 就是质数 然后mark有A i 因子的数 2 A i 3 A
  • sed命令详解

    http www cnblogs com edwardlost archive 2010 09 17 1829145 htm 1 简介 sed是非交互式的编辑器 它不会修改文件 除非使用shell重定向来保存结果 默认情况下 所有的输出行都
  • MongoDB的基本使用

    基本操作 mongod f mongodb conf 启动mongodb mongo 进入到mongodb控制台 db shutdownServer 关闭服务 user admin db createUser user root pwd r