MongoDB入门
概念
属于nosql
上手快
相对与RDBMS的table,MongoDB采用了collection
document相对于RDBMS的row,与json比较相似,比如
{name:"aaa",age:14}
field相对于RDBMS的column
基本命令介绍
启动命令:
mongo
默认为mongo 127.0.0.1:27017
查看有哪些数据库
1
2
3
4> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB默认会使用test数据库,但一开始没数据所以看不到
在test中的user集合(自动会创建)中插入一条数据,结果返回WriteResult对象,”
nInserted
“表示影响的记录数1
2
3
4
5
6
7
8
9
10
11
12> use test
switched to db test
> db
test
> db.user.insertOne({name:"aaa",age:14})
WriteResult({ "nInserted" : 1 })
> db.user.insertOne({name:"bbb",age:18,"address":"北京"})
WriteResult({ "nInserted" : 1 })
> doc=({name:"dd",age:11})
{ "name" : "dd", "age" : 11 }
> db.user.insertOne(doc)
WriteResult({ "nInserted" : 1 })新的字段会自动添加,方便扩展,变量也可以插入数据
集合的基本操作
1
2
3
4
5
6
7
8> db.createCollection("runoob")
{ "ok" : 1 }
> show collections
student
user
> db.student.drop()
> show tables
user查看集合可以用tables,但不够严谨
查询集合中数据
1
2
3
4
5
6
7
8
9
10> db.user.find()
{ "_id" : ObjectId("5e89884d983ca629b5e9b574"), "name" : "aaa", "age" : 20 }
{ "_id" : ObjectId("5e898875983ca629b5e9b575"), "name" : "bbb", "age" : 18, "address" : "北京" }
> db.user.find({name:"aaa"})
{ "_id" : ObjectId("5e89884d983ca629b5e9b574"), "name" : "aaa", "age" : 20 }
> db.user.find({age:{$gt:18}})
{ "_id" : ObjectId("5e89884d983ca629b5e9b574"), "name" : "aaa", "age" : 21 }
> db.user.find({$or:[{age:{$gt:18,$lt:22}},{"name":"bbb"}]})
{ "_id" : ObjectId("5e89884d983ca629b5e9b574"), "name" : "aaa", "age" : 21 }
{ "_id" : ObjectId("5e898875983ca629b5e9b575"), "name" : "bbb", "age" : 18, "address" : "北京" }可以看到主键”
_id
“是自动生成的,find方法可以加入条件,支持$gt等比较运算,以及$or条件,$regex正则匹配等update方法
1
2> db.user.update({name:"aaa"},{$set:{age:20}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })还有三个可选参数upsert, multi, writeConcern
删除数据
1
2
3> db.user.deleteMany({age:30})
WriteResult({ "nRemoved" : 2 })
> db.user.deleOne({_id:ObjectId("1231e241")})满足条件的document都会删掉,还有deleteOne方法只会删除一个document
删除数据库
1
2
3
4> use test
switched to db test
> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
使用python操作MongoDB
连接
1
2
3
4
5import pymongo
client = pymongo.MongoClient(host="localhost", port=27017)
db = client['test'] # 指定数据库为test
collection = db['user'] # 指定collection为user插入操作
1
2
3
4
5
6
7
8user = {
'name': 'python',
'age': 50
}
users = [user.copy() for i in range(4)]
collection.insert_one(user) # 插入单条document
collection.insert_many(users) # 利用可迭代对象插入多条document查找与更新
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15result = collection.find_one({'name': 'python'}) # 查找单条
print(result)
# {'_id': ObjectId('5e89be93e3a85de07d04cb32'), 'name': 'python', 'age': 50}
collection.find_one_and_update({'name': 'python'}, {'$set': {'age': 30}}) # 查找一条并修改
result = collection.find({'name': 'python'}) # 查找多条,返回一个生成器
print(collection.count_documents({'name': 'python'})) # 查找结果总数
# 1
# 根据主键查找
from bson.objectid import ObjectId
print(collection.find_one({'_id': ObjectId('5e89b91f4a7a179ff823b9a3')}))
# {'_id': ObjectId('5e89be93e3a85de07d04cb32'), 'name': 'python', 'age': 50}删除与更新
1
2collection.find_one_and_delete({'name': 'python'}) # 根据条件找到一条并删除
collection.delete_many({'name': 'python'}) # 删除所有满足条件的结果对结果排序
1
2
3
4
5
6
7
8
9result = collection.find().sort('age',pymongo.DESCENDING)
for r in result:
print(r)
'''
{'_id': ObjectId('5e89c067a49025c2a690cb5f'), 'name': 'python', 'age': 50}
{'_id': ObjectId('5e89884d983ca629b5e9b574'), 'name': 'aaa', 'age': 21.0}
{'_id': ObjectId('5e898875983ca629b5e9b575'), 'name': 'bbb', 'age': 18, 'address': '北京'}
{'_id': ObjectId('5e89a787ba556f887d48c61d'), 'name': 'dd', 'age': 11.0}
'''
使用node.js操作MongoDB
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment