MongoDB数据库的基本操作

MongoDB数据库的基本操作

一、数据库与集合的操作

1、数据库的操作

(1)操作语法
# 创建数据库
use DATABASE_NAME
# 删除数据库
db.dropDatabase()
(2)操作案例
#刚创建的库并不存在于表中,只有插入数据时才会在表中显示
> use test123
switched to db test123
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> db.test123.insert({"test":"test123"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin    0.000GB
config   0.000GB
local    0.000GB
test123  0.000GB
# 删除数据库
> use test123
switched to db test123
> db.dropDatabase()
{ "dropped" : "test123", "ok" : 1 }
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

2、集合的操作

(1)集合的操作语法
# 创建集合
db.createCollection(name, options)
# 创建集合时options为可选参数,主要有以下参数
#   capped: 如果为true则创建固定集合,固定集合是指有固定大小的集合,当达到最大值时会自动覆盖最早的文档,当该值为true时,必须指定size参数 
#   size: 为固定集合指定一个最大值,即字节数
#   max: 指定固定集合中包含文档的最大数值
# 删除集合
db.collection.drop()
# 查看集合
show collections
(2)集合的操作案例
# 在库dayi123中创建集合test
> use dayi123
switched to db dayi123
> db.createCollection("test")
{ "ok" : 1 }
# 创建集合时指定参数
> db.createCollection("mytest",{ capped : true, size : 6142800, max : 10000})
{ "ok" : 1 }
# 在插入文档时也会自动创建集合
> db.mytest2.insert({"test" : "test123"})
WriteResult({ "nInserted" : 1 })
# 删除集合
> use dayi123
switched to db dayi123
> db.mytest2.drop()
true
> show collections
mytest
test

3、对文档的操作

(1)插入文档

1)插入文档语法

# 语法格式
db.COLLECTION_NAME.insert(document)  # 在该方法中若插入的数据主键已经存在,则会抛org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据
db.COLLECTION_NAME.save(document)    # 如果 _id 主键存在则更新数据,如果不存在就插入数据。
# db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:
db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)
# db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:参数说明如下:
#   document:要写入的文档
#   writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
#   ordered:指定是否按顺序写入,默认 true,按顺序写入。
db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)

2)操作示例

# 通过db.COLLECTION_NAME.insert方法插入数据
> db.mytest.insert({title: '测试插入第一条数据', 
...     description: 'MongoDB 是一个 Nosql 数据库',
...     by: 'test01',
...     tags: ['mongodb', 'database', 'NoSQL'],
...     likes: 100
... })
WriteResult({ "nInserted" : 1 })
# 通过db.col.insert方法将数据定义为一个变量进行插入
> data=({title: '测试插入第二条数据', 
...     description: 'MongoDB 是一个 Nosql 数据库',
...     by: 'test01',
...     tags: ['mongodb', 'database', 'NoSQL'],
...     likes: 100
... })
{
	"title" : "测试插入第二条数据",
	"description" : "MongoDB 是一个 Nosql 数据库",
	"by" : "test01",
	"tags" : [
		"mongodb",
		"database",
		"NoSQL"
	],
	"likes" : 100
}
> db.mytest.insert(data)
WriteResult({ "nInserted" : 1 })
# 查看插入的数据
> db.mytest.find()
{ "_id" : ObjectId("60edbdd42e921da517218631"), "title" : "测试插入第一条数据", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "test01", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("60edbe4f2e921da517218632"), "title" : "测试插入第二条数据", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "test01", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
> db.mytest.insertOne({"a1" : 1})
{
	"acknowledged" : true,
	"insertedId" : ObjectId("60edbf4e2e921da517218633")
}
# 通过db.collection.insertOne()插入一条数据
> db.mytest.insertOne({"a1" : 1})
{
	"acknowledged" : true,
	"insertedId" : ObjectId("60edbf4e2e921da517218633")
}
# 通过db.collection.insertOne()插入多条数据
> db.mytest.insertMany([{"a2": 2},{"a3": 3}])
{
	"acknowledged" : true,
	"insertedIds" : [
		ObjectId("60edbf9c2e921da517218634"),
		ObjectId("60edbf9c2e921da517218635")
	]
}
# 通过数组的方式插入多条数据
> var arr = [];
> for(var i=1 ; i<=50 ; i++){
...     arr.push({num:i});
... }
50
> db.mytest.insert(arr);
BulkWriteResult({
	"writeErrors" : [ ],
	"writeConcernErrors" : [ ],
	"nInserted" : 50,
	"nUpserted" : 0,
	"nMatched" : 0,
	"nModified" : 0,
	"nRemoved" : 0,
	"upserted" : [ ]
})
(2)更新文档

1)语法

# 更新文档语法
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
# 参数说明
#    query : update的查询条件,类似sql update查询内where后面的。
#    update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
#    upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
#    multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
#    writeConcern :可选,抛出异常的级别。

# 也可通过save方法更新
db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)
# 参数说明:
#     document : 文档数据。
#     writeConcern :可选,抛出异常的级别

2)示例

# 更新匹配到的第一条数据
> db.mytest.update({"title" : "测试插入第一条数据"},{$set:{"title" : "更新的第一条数据"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.mytest.find()
{ "_id" : ObjectId("60edbdd42e921da517218631"), "title" : "更新的第一条数据", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "test01", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
# 你要修改多条相同的文档,则需要设置 multi 参数为 true。
db.mytest.update({"description" : "MongoDB 是一个 Nosql 数据库"},{$set:{"description" : "mongodb is nosql"}},{multi:true})
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
# 通过save的方法更新
> db.mytest.save({
... "_id" : ObjectId("60edbdd42e921da517218631"),
... "title" : "第一条数据",
... "description" : "mongodb is nosql",
... "by" : "test01",
... "tags" : [
... "mongodb",
... "database",
... "NoSQL"
... ],
... "likes" : 100
... })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.mytest.find().pretty()
{
	"_id" : ObjectId("60edbdd42e921da517218631"),
	"title" : "第一条数据",
	"description" : "mongodb is nosql",
	"by" : "test01",
	"tags" : [
		"mongodb",
		"database",
		"NoSQL"
	],
	"likes" : 100
}
(3)删除文档

1)语法

# 删除文档语法
db.collection.remove(
   <query>,
   <justOne>
)
# 参数说明
#     query : (可选)删除的文档的条件。
#     justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
# 删除满足条件的所所有文档
db.inventory.deleteMany()
# 删除满足条件的第一个文档
db.inventory.deleteOne()

2)示例

# 删除匹配到的所有文档
> db.mytest.remove({"title" : "第一条数据"})
WriteResult({ "nRemoved" : 1 })
# 删除满足条件的所有文档
> db.mytest.deleteMany({"a1" : 1})
{ "acknowledged" : true, "deletedCount" : 1 }
# 删除满足条件的第一个文档
> db.mytest.deleteOne({"num" : 1})
{ "acknowledged" : true, "deletedCount" : 1 }
# 删除集合下的所有文档
> db.mytest.deleteMany({})
{ "acknowledged" : true, "deletedCount" : 52 }
(4)查询

1)mongodb中条件操作符

  • (>) 大于 - $gt
  • (<) 小于 - $lt
  • (>=) 大于等于 - $gte
  • (<= ) 小于等于 - $lte
  1. 查询语法
# 基本查询语法
db.collection.find(query, projection)
# 参数说明:
#     query :可选,使用查询操作符指定查询条件
#     projection :可选,使用投影操作符指定返回的键。默认省略返回所有值
# 如果需要以易读的方式来读取数据,可以使用 pretty() 方法
# 还有一个 findOne() 方法,它只返回一个文档。
# 使用AND方法查询语法
db.col.find({key1:value1, key2:value2}).pretty()
# 使用OR方法的查询语法
db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

3)查询示例

# 通过AND条件查询同时满足title和likes的数据
> db.mytest.find({"title" : "测试插入第一条数据","likes" : 100})
{ "_id" : ObjectId("60ede3712e921da517218668"), "title" : "测试插入第一条数据", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "test01", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
# 通过or条件查询满足title或likes的数据
> db.mytest.find({$or:[{"title" : "测试插入第一条数据"},{"likes" : 200}]})
{ "_id" : ObjectId("60ede3712e921da517218668"), "title" : "测试插入第一条数据", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "test01", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("60ede3c22e921da51721866c"), "title" : "测试插入第五条数据", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "test01", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 200 }
# AND条件和or条件的联合使用
> db.mytest.find({"likes": {$gt:103}, $or: [{"title" : "测试插入第一条数据"},{"title" : "测试插入第四条数据"}]})
{ "_id" : ObjectId("60ede3ad2e921da51721866b"), "title" : "测试插入第四条数据", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "test01", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 104 }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值