一、MongoDB介绍
MongoDB属于NoSLQ型数据库 。
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
二、数据库目录结构
在使用MongoDB前我们需要开启MongoDB service端口
mongodb://localhost:27017
然后我们就可以使用了
首先我们需要来了解一下MongoDB的目录结构:
连接MongoDB服务后,在端口下我们可以看到有几个数据库(例如:admin、config、coolcar等),一个数据库下可以有一个或者多个collection(例如:coolcar下有一个account),而一个collection下面则是Documents,该文档下就是具体的一条或多条数据。
三、基本操作(CRUD)
这里以coolcar数据库中的account为例
1. 增加数据
当我们使用一下代码时,如果coolcar没有account时,MongoDB会为我们创建
即:db.collection.insert()
db.acconut.insert() //增加数据,可以单条,或者多条 | |
db.account.insertOne() //增加一条数据 | |
db.account.insertMany() //增加多条数据 |
例:
db.account.insertMany([ | |
{ | |
_id: "01", //如果_id不设,系统会自动设置 | |
open_id:"trip01", | |
login_count: 3, | |
}, | |
{ | |
_id: "02", | |
open_id: "trip02", | |
login_count:4, | |
}, | |
]) |
数据就已经写入了:
{ | |
"acknowledged": true, | |
"insertedIds": { | |
"0": "01", | |
"1": "02" | |
} | |
} |
_id: “01”:
{ | |
"_id": "01", | |
"open_id": "trip01", | |
"login_count": 3 | |
} |
_id:”02”:
{ | |
"_id": "02", | |
"open_id": "trip02", | |
"login_count": 4 | |
} |
2. 查找数据
//查数据 | |
db.account.find() | |
ab.account.findAndModify() |
运行:db.account.find()
[ | |
{ | |
"_id": "01", | |
"open_id": "trip01", | |
"login_count": 3 | |
}, | |
{ | |
"_id": "02", | |
"open_id": "trip02", | |
"login_count": 4 | |
} | |
] |
当然这里还可以根据条件find
//查找大于3的login_count | |
db.account.find({ | |
login_count:{$gt:3} | |
}) | |
//and逻辑查找 | |
db.account.find({ | |
login_count:{$gt:3}, | |
open_id:"trip500", | |
}) | |
//根据字段查找 | |
db.account.find({ | |
"profile.age":{$lte: 30} | |
}) | |
db.account.getIndexes({ | |
"profile.age":1 | |
}) | |
//or逻辑查找 | |
//$or:[{con1, con2} or {con3}] | |
db.account.find({ | |
$or:[ | |
{ | |
login_count:{$gt: 2}, | |
open_id: "trip05", | |
}, | |
{ | |
login_count: 3, | |
} | |
] | |
}) |
当然我们还可以使更新数据的方法来修改
//查找open_id,如果有则找到,没有则创建 | |
function resolveOpenId(open_id){ | |
return db.account.update({ | |
open_id: open_id | |
}, { | |
$set:{ | |
open_id: open_id | |
} | |
}, { | |
upsert: true | |
}) | |
} |
3. 更新数据
db.account.update() | |
db.account.updateOne() | |
db.account.updateMany() |
我们仍然以db.account.update()
为例
db.account.update({ | |
_id:"01" //先找到_id:"01"的数据 | |
},{ | |
$set:{ //更新的内容 | |
open_id:"trip05", | |
login_count:0, | |
} | |
}) |
然后我们就可以看到:
{ | |
"_id": "01", | |
"open_id": "trip05", | |
"login_count": 0 | |
} |
当然还有一个更新方式:
//更新数据 | |
db.account.update({ | |
_id: "01" | |
},{ | |
$inc:{ | |
login_count: 100 //在原本login_count值的基础上加上100 | |
}, | |
$set:{ | |
open_id: "trip500" | |
} | |
}) |
看一下结果:
{ | |
"_id": "01", | |
"open_id": "trip500", | |
"login_count": 100 | |
} |
当然,这里我们还可以增加其他信息:
//更新数据 | |
db.account.update({ | |
_id: "02" | |
}, | |
{ | |
$set:{ | |
profile:{ | |
name:"abc", | |
age: 21, | |
photo_url: "https://example.com/123", | |
} | |
} | |
}) |
结果:
{ | |
"_id": "02", | |
"open_id": "trip02", | |
"login_count": 4, | |
"profile": { | |
"name": "abc", | |
"age": 21, | |
"photo_url": "https://example.com/123" | |
} | |
} |
4. 删除数据
db.account.deleteOne() | |
db.account.deleteMany() |
这里以db.account.deleteOne()
为例:
db.account.deleteOne({ | |
_id: "01" | |
}) |
看到这样的结果:
{ | |
"acknowledged": true, | |
"deletedCount": 1 //删除条数据 | |
} |
如果我们需要清空account中的数据可以使用:
db.account.drop()