MongoDB基本用法

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB基本用法

1,基本操作

1.1切换数据库

代码语言:javascript

复制

test>use admin
switched to db admin
admin>

1.2建立用户

代码语言:javascript

复制

admin> db.createUser({user:"jerry", pwd:"123456", roles: ["root"]})

jerry:用户名

123456:密码

root:角色

{ ok: 1 }

1.3显示用户

代码语言:javascript

复制

admin> show users
[
  {
    _id: 'admin.jerry',
    userId: UUID('a86e9f3d-598e-4cbf-9419-4fa459f6773b'),
    user: 'jerry',
    db: 'admin',
    roles: [ { role: 'root', db: 'admin' } ],
    mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]    
  }
]

2数据库操作

2.1 进入数据库

代码语言:javascript

复制

use db_name

比如切换到mongo数据库,如果该数据库不存在,会自动创建          

2.2 显示数据库

代码语言:javascript

复制

admin> db
admin

2.3删除数据库

代码语言:javascript

复制

admin> db.dropDatabase()

2.4 查看所有数据库

代码语言:javascript

复制

admin> show dbs
admin   132.00 KiB
config   92.00 KiB
local    40.00 KiB
admin> show databases
admin   132.00 KiB
config   92.00 KiB
local    40.00 KiB

2.5查看数据库版本

代码语言:javascript

复制

admin> db.version()    
7.0.14

3集合操作

3.1创建集合

代码语言:javascript

复制

admin> db.createCollection(name, options)

集合相当于普通数据库的表

一般不需要使用这个命令,因为在往集合里添加数据时,如果集合不存在会自动创建

options参数的可选值:

参数

说明

capped

是否固定集合大小,设置为true时,当集合元素达到设定的值时会覆盖最老的数据

size

设置集合数据大小

max

指定固定集合中最大文档数量

3.2删除集合

代码语言:javascript

复制

admin> db.collection_name.drop()

案例

代码语言:javascript

复制

admin>show tabless
person
user
admin> db.person.drop()
admin>show tabless
user

查看当前数据库所有集合

代码语言:javascript

复制

admin> show collections    
system.users
system.version
admin>

4文档操作

4.1 添加操作

4.1.1 insert

代码语言:javascript

复制

admin>db.person.insert({"name": "Jerry"});
DeprecationWarning: Collection.insert() is deprecated. Use insertOne, insertMany, or bulkWrite.
{
  acknowledged: true,
  insertedIds: { '0': ObjectId('66d7de35f5f38e175c5e739c') }
}
admin>

4.1.2 insertOne

往集合里添加一条数据,同insert

代码语言:javascript

复制

admin>db.person.insertOne({"name": "Tom", age: 37});
{
  acknowledged: true,
  insertedId: ObjectId('66d7decaf5f38e175c5e739d')
}

4.1.3往集合里一次性添加多条数据 (insertMany )

代码语言:javascript

复制

admin>db.person.insertMany([{"name": "Cindy", age: 43}, {"name": "Linda", age: 21}, {"name": "Jessca", age: 30}]);
{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId('66d7df39f5f38e175c5e739e'),
    '1': ObjectId('66d7df39f5f38e175c5e739f'),
    '2': ObjectId('66d7df39f5f38e175c5e73a0')
  }
}

5查询操作

5.1无条件查询

代码语言:javascript

复制

admin>db.person.find()
[
  { _id: ObjectId('66d7de35f5f38e175c5e739c'), name: 'Jerry' },
  { _id: ObjectId('66d7decaf5f38e175c5e739d'), name: 'Tom', age: 37 },
  { _id: ObjectId('66d7df39f5f38e175c5e739e'), name: 'Cindy', age: 43 },
  { _id: ObjectId('66d7df39f5f38e175c5e739f'), name: 'Linda', age: 21 },
  {
    _id: ObjectId('66d7df39f5f38e175c5e73a0'),
    name: 'Jessca',    
    age: 30
  }
]

5.2带条件的查询

代码语言:javascript

复制

admin>db.person.find({"name": "Jerry"})
[ { _id: ObjectId('66d7de35f5f38e175c5e739c'), name: 'Jerry' } ]

5.3字段排序

升序

代码语言:javascript

复制

admin>db.person.find().sort({age: 1});
[
  { _id: ObjectId('66d7de35f5f38e175c5e739c'), name: 'Jerry' },
  { _id: ObjectId('66d7df39f5f38e175c5e739f'), name: 'Linda', age: 21 },
  {
    _id: ObjectId('66d7df39f5f38e175c5e73a0'),
    name: 'Jessca',
    age: 30
  },
  { _id: ObjectId('66d7decaf5f38e175c5e739d'), name: 'Tom', age: 37 },
  { _id: ObjectId('66d7df39f5f38e175c5e739e'), name: 'Cindy', age: 43 }
]

降序

代码语言:javascript

复制

admin>db.person.find().sort({age: -1});    
[
  { _id: ObjectId('66d7df39f5f38e175c5e739e'), name: 'Cindy', age: 43 },
  { _id: ObjectId('66d7decaf5f38e175c5e739d'), name: 'Tom', age: 37 },
  {
    _id: ObjectId('66d7df39f5f38e175c5e73a0'),
    name: 'Jessca',
    age: 30
  },
  { _id: ObjectId('66d7df39f5f38e175c5e739f'), name: 'Linda', age: 21 },
  { _id: ObjectId('66d7de35f5f38e175c5e739c'), name: 'Jerry' }
]

5.4查询分页

代码语言:javascript

复制

admin>db.person.find().skip(0).limit(3)
[
  { _id: ObjectId('66d7de35f5f38e175c5e739c'), name: 'Jerry' },
  { _id: ObjectId('66d7decaf5f38e175c5e739d'), name: 'Tom', age: 37 },
  { _id: ObjectId('66d7df39f5f38e175c5e739e'), name: 'Cindy', age: 43 }
]

等价于

代码语言:javascript

复制

admin>db.person.find().limit(3)
[
  { _id: ObjectId('66d7de35f5f38e175c5e739c'), name: 'Jerry' },    
  { _id: ObjectId('66d7decaf5f38e175c5e739d'), name: 'Tom', age: 37 },
  { _id: ObjectId('66d7df39f5f38e175c5e739e'), name: 'Cindy', age: 43 }
]

跳过两条记录

代码语言:javascript

复制

admin> db.person.find().skip(2);
[
  { _id: ObjectId('66d7df39f5f38e175c5e739e'), name: 'Cindy', age: 43 },
  { _id: ObjectId('66d7df39f5f38e175c5e739f'), name: 'Linda', age: 21 },
  {
    _id: ObjectId('66d7df39f5f38e175c5e73a0'),
    name: 'Jessca',
    age: 30
  }
]

5.5比较操作

代码语言:javascript

复制

admin> db.person.find({age: {$gte:30 }})
[
  { _id: ObjectId('66d7decaf5f38e175c5e739d'), name: 'Tom', age: 37 },
  { _id: ObjectId('66d7df39f5f38e175c5e739e'), name: 'Cindy', age: 43 },
  {
    _id: ObjectId('66d7df39f5f38e175c5e73a0'),
    name: 'Jessca',    
    age: 34
  }
]
  • $gte:大于等于(Greater Than or Equal to)
  • $lt:小于(Less Than)
  • $lte:小于等于(Less Than or Equal to)
  • $gt:大于(Greater Than)

5.6更多查询方式

代码语言:javascript

复制

admin> db.person.find({name: {$eq: "Jerry"}})
admin> db.person.find({name: {$eq: "Jerry"}})
[ { _id: ObjectId('66d7de35f5f38e175c5e739c'), name: 'Jerry' } ]
admin> db.person.find({name: {$eq: "jerry"}})
           
admin>

说明:大小写敏感

6更新操作

6.1 update

这个命令的第三个参数是一个可选的选项

  • upsert:如果不存在update的记录,是否插入新的记录。默认false,不插入
  • multi:是否按条件查询出的多条记录全部更新。默认false,只更新找到的第一条记录
  • writeConcern:决定一个写操作落到多少个节点上才算成功。

代码语言:javascript

复制

admin>db.person.find()
[
  { _id: ObjectId('66d7de35f5f38e175c5e739c'), name: 'Jerry' },
  { _id: ObjectId('66d7decaf5f38e175c5e739d'), name: 'Tom', age: 37 },
  { _id: ObjectId('66d7df39f5f38e175c5e739e'), name: 'Cindy', age: 43 },
  { _id: ObjectId('66d7df39f5f38e175c5e739f'), name: 'Linda', age: 21 },
  {_id: ObjectId('66d7df39f5f38e175c5e73a0'),name: 'Jessca',age: 30
  }
]
admin> db.person.update({name: 'Jerry'},{$set:{name: 'Jerry',age: 28}}, {multi:true})
DeprecationWarning: Collection.update() is deprecated. Use updateOne, updateMany, or bulkWrite.
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}
admin>db.person.find()
[    
  { _id: ObjectId('66d7de35f5f38e175c5e739c'), name: 'Jerry', age: 28 },
  { _id: ObjectId('66d7decaf5f38e175c5e739d'), name: 'Tom', age: 37 },
  { _id: ObjectId('66d7df39f5f38e175c5e739e'), name: 'Cindy', age: 43 },
  { _id: ObjectId('66d7df39f5f38e175c5e739f'), name: 'Linda', age: 21 },
  {
    _id: ObjectId('66d7df39f5f38e175c5e73a0'),
    name: 'Jessca',
    age: 30
  }
]

6.2更新单条数据(updateOne)

代码语言:javascript

复制

admin>db.person.updateOne({_id: ObjectId("66d7df39f5f38e175c5e73a0")}, {$set: { age: 34}})
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}

6.3更新多条数据(updateMany)

代码语言:javascript

复制

admin>db.person.updateMany(      
  { name: "Cindy " },             // 查询条件  
  { $set: { age: 32 } }             // 更新操作  
)
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 0,
  modifiedCount: 0,
  upsertedCount: 0
}

6.4替换一条数据(replaceOne)

代码语言:javascript

复制

replaceOne 会用新的文档完全取代旧的文档,包括 _id 字段。如果新的文档中没有 _id 字段或 _id 字段值与旧的不同,会导致文档被赋予新的 _id。
admin>db.person.replaceOne(  
  { "name": " Jerry " },  // 过滤条件  
  { "_id": ObjectId('66d7de35f5f38e175c5e739d'), "name": "Jerry", "age": 24},  // 新的文档  
  { upsert: true }  // 使用 upsert 选项  
);
{
  acknowledged: true,
  insertedId: '66d7de35f5f38e175c5e739c',    
  matchedCount: 0,
  modifiedCount: 0,
  upsertedCount: 1
}
admin> db.person.find()
[
  { _id: ObjectId('66d7de35f5f38e175c5e739c'), name: 'Jerry', age: 28 },
  { _id: ObjectId('66d7decaf5f38e175c5e739d'), name: 'Tom', age: 37 },
  { _id: ObjectId('66d7df39f5f38e175c5e739e'), name: 'Cindy', age: 43 },
  { _id: ObjectId('66d7df39f5f38e175c5e739f'), name: 'Linda', age: 21 },
  {
    _id: ObjectId('66d7df39f5f38e175c5e73a0'),
    name: 'Jessca',
    age: 34
  },
  { _id: ObjectId('66d7de35f5f38e175c5e739d'), name: 'Jerry', age: 24 }
]

7删除操作

7.1删除一条记录(deleteOne)

代码语言:javascript

复制

admin> db.person.deleteOne({name: 'Jerry', age: 24})
{ acknowledged: true, deletedCount: 1 }

7.2删除多条(deleteMany)

7.2.1 无条件删除(deleteOne)

代码语言:javascript

复制

admin>db.collection.deleteMany()

7.2.2带条件删除(deleteOne)

代码语言:javascript

复制

admin>db.collection.deleteMany({name: "Jerry"})

8关闭MongoDB

8.1关闭方式一

代码语言:javascript

复制

bin/mongod --port=27017 --dbpath=/etc/mongodb/data --shutdown

8.2关闭方式二

代码语言:javascript

复制

use admin
db.shutdownServer()

8.3关闭方式三

通过kill进程来关闭

代码语言:javascript

复制

ps -ef | grep mongodb
kill PID
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
3月前
|
NoSQL Java MongoDB
SpringBoot中MongoDB的那些高级用法
本文探讨了在Spring Boot项目中使用MongoDB的多种方式及其高级用法。MongoDB作为一种NoSQL数据库,在某些场景下相较于SQL数据库有着独特的优势。文中详细介绍了在Spring Boot中使用MongoDB的三种主要方式:直接使用官方SDK、使用Spring JPA以及使用MongoTemplate,并对比分析了它们之间的差异。此外,文章深入讲解了Spring Data MongoDB提供的各种注解(如@Id, @Document, @Field等)以简化操作流程,并探讨了MongoTemplate监听器的应用,如设置主键值、记录日志等。
174 2
|
3月前
|
NoSQL Java MongoDB
SpringBoot中MongoDB的那些骚操作用法
MongoDB作为一种NoSQL数据库,在不需要传统SQL数据库的表格结构的情况下,提供了灵活的数据存储方案。在Spring Boot中可以通过官方SDK、Spring JPA或MongoTemplate等方式集成MongoDB。文章重点介绍了Spring Data MongoDB提供的注解功能,例如`@Id`、`@Document`和`@Field`等,这些注解简化了Java对象到MongoDB文档的映射。此外,文中还讨论了MongoTemplate监听器的使用,包括设置主键值和日志记录等高级特性。
239 0
SpringBoot中MongoDB的那些骚操作用法
|
开发框架 NoSQL .NET
快速掌握mongoDB(四)—— C#驱动MongoDB用法演示
快速掌握mongoDB(四)—— C#驱动MongoDB用法演示阅读目录 0.准备测试数据 1 添加(InsertOne,InsertMany) 2 查询(Find,Filter,Sort,Projection) 1.
2041 0
|
NoSQL Linux 数据库
MongoDB基本用法
1、windows windows环境下使用mongodb可以安装可视化工具 比如:mongobooster, robomongo等 2、linux linux下mongo数据库的基本操作如下: 连接mongo数据库:mongo xxx.
834 0
|
NoSQL MongoDB 数据格式
mongodb-java-driver基本用法
1、先下载mongodb-java-driver 目前最新版本是2.9.3 2、下面是基本的CRUD示例代码: 1 package com.cnblogs.yjmyzz.cache.test; 2 3 import com.
1190 0
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
2月前
|
存储 NoSQL 关系型数据库
非关系型数据库-MongoDB技术(二)
非关系型数据库-MongoDB技术(二)
|
28天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
29天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
下一篇
无影云桌面