MongoDB学习笔记—updating
json可以为我们描述多种关系:一对一、一对多、多对一和多对多
与js语法类似
创建记录会自动生成一条_id
主键,唯一id,代表该Object,也可以声明为自定义的数据
{_id:"123"}
BSON和JSON
我们都知道Mongodb存储的是BSON格式数据,BSON格式数据以二进制格式存储,可以嵌套文档和数组,增加了数据类型,Date,相比JSON的字符串存储,因为是二进制存储,不需要序列化,可以直接网络传输
优点:
- 轻量
- 可遍历(不存储字符串,可直接通过索引获取
- 高效(无需序列化)
- 增加了额外的数据类型
缺点:
- 空间消耗多(一个整数BSON 4字节,JSON 1字节)
下面是JSON:
"_id": 1,
"name" : { "first" : "John", "last" : "Backus" },
"contribs" : [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ],
"awards" : [
{
"award" : "W.W. McDowell Award",
"year" : 1967,
"by" : "IEEE Computer Society"
}, {
"award" : "Draper Prize",
"year" : 1993,
"by" : "National Academy of Engineering"
}
]
}
下面两个是BSON
{
title:"MongoDB",
last_editor:"192.168.1.122",
last_modified:new Date("27/06/2011"),
body:"MongoDB introduction",
categories:["Database","NoSQL","BSON"],
revieved:false
}
{
name:"lemo",
age:"12",
address:{
city:"suzhou",
country:"china",
code:215000
} ,
scores:[
{"name":"english","grade:3.0},
{"name":"chinese","grade:2.0}
]
}
命令行
-
mongod
是用来连接到mongodb数据库服务器的,即服务器端。 -
mongo
是用来启动MongoDB shell的,是mongodb的命令行客户端。
常用操作
- use db_name 切换db
- show dbs 查看所有db
- show collections 查看当前db所有collections
- db 查看当前db
增
- db.collection.insert 插入数据
- db.collection.insertOne 插入一条数据
- db.collection.insertMany 插入多条数据
db.people.insertOne(
{ user_id: "bcd001", age: 45, status: "A" }
)
等价:
INSERT INTO people(user_id,age,status) VALUES ("bcd001",45,"A")
查
- db.collection.find() 查找
- db.collection.findOne() 查看一个
- db.collection.find().limit() 查找限制条数
- db.collection.find().count() 返回找到数据条数
db.people.find(
{ status: "A" }
)
等价:SELECT * FROM people WHERE status = "A"
- 投影
查询结果的显示哪些数据 select 投影字段 from collections
find({},{投影结果数据})
db.people.find(
{ }, { user_id: 1, status: 1, _id: 0 }
)
等价:SELECT user_id, status FROM people
改
- update() 替换 通过
$set
更换某一属性值 - db.collection.updateOne() 更新符合条件第一条
- db.collection.updateMany() 更新符合条件的所有
- db.collection.replaceOne() 替换符合条件的一条(所有属性)
db.getCollection('user').update({name:"zfb"},{$set:{name:"dx",age:"12"}})
删
- unset删除一个属性
- db.collection.remove({})全删除(一个一个) 应该使用db.collections.drop(),直接删除,效率更高
- db.collection.remove() 一个或者多个,通过设置第二个参数为true则删除一个
- db.collection.deleteOne() 删除一条符合条件
- db.collection. deleteMany() 删除所有符合条件
- db.dropDatabase() 删除db,谨慎使用
db.getCollection('user').remove({name:"wgy"},true)
过滤器
- $lt 少于
db.people.find(
{ age: { $lt: 25 } }
)
等价:
SELECT * FROM people WHERE age < 25
- $gt 大于
db.people.find(
{ age: { $gt: 25 } }
)
等价:
SELECT * FROM people WHERE age > 25
- $lte less than equal 小于等于
db.people.find(
{ age: { $gt: 25, $lte: 50 } }
)
等价:
SELECT * FROM people WHERE age > 25 AND age <= 50
- $regex
/关键字/
模糊查询
db.people.find( { user_id: /bc/ } )
等价:
db.people.find( { user_id: { $regex: /bc/ } } )
等价:
SELECT * FROM people WHERE user_id like "%bc%"
db.people.find( { user_id: /bc^/ } )
等价:
db.people.find( { user_id: { $regex: /bc^/ } } )
等价:
SELECT * FROM people WHERE user_id like "%bc"
- $exists 存在某个属性
db.people.count( { user_id: { $exists: true } } )
等价:
SELECT COUNT(user_id) FROM people
- $and 条件and连接
db.inventory.find( { $and: [ { price: { $ne: 1.99 } }, { name: "dx" } ] } )
等价:
select * from user where price!=1.99 and name="dx"
- $or 条件或连接,与and对应
- $ne 不等于某个值的记录
db.user.find( { qty: { $ne: 20 } } )
等价:
select * form user where qtf!=20
常用方法
- explain() 解释某条sql
db.people.find( { status: "A" } ).explain()
等价:
EXPLAIN SELECT * FROM people WHERE status = "A"
- skip() 跳过指定条数记录
db.people.find().limit(5).skip(10)
等价:
SELECT * FROM people LIMIT 5 SKIP 10
- distinct()去重
db.people.distinct( "status" )
等价:
SELECT DISTINCT(status) FROM people
- count()
- limit()
- sort() 下面索引部分
索引
排序
索引可以用于排序sort()
1升 -1降
find().sort({user_id:1})
根据user_id升序排序
创建索引
db.collection.createIndex( { name: -1 } )
SpringBoot—MongoTemplate
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- MongoTemplate
- MongoRepository
参考博文:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。