MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
linux安装mongodb的步骤不再赘述,也就是一条命令而已,安装好mongodb后,如果想远程连接,要找到/etc/mongodb.conf,将配置文件中的bind_ip=127.0.0.1 这一行注释掉或者是修改成 bind_ip=0.0.0.0
输入mongo
进入mongodb,这也是检验mongodb是否安装成功。
show dbs # 查看mongodb中存在的数据库
use test #切换到test数据库,如果不存在就新建test数据库
db.test1.insert({name:'xfy'}) #在集合test1里新增一条数据(test1不存在会新建)
db.test2.insert([{name:'xfy',age:22,sex:'男'},{name:'stefan',age:23,sex:'男'}]) #在集合test2里新增多条数据(test2不存在会新建)
#不带条件查询
db.test2.find() #查询test2中的所有数据
db.test2.findOne()#查询test2中的一条数据
db.test2.find().sort({age:1}) #查询出来的数据按年龄升序
db.test2.find().sort({age:-1})#查询出来的数据按年龄降序
#带条件查询
db.test2.findOne({name:'xfy'})
db.test2.find({sex:'男'},{_id:0}) #查询的第一个参数是条件,第二个参数要显示哪些字段,默认是都显示,0是不显示,1是显示
db.test2.find({age:{'$gte':22}}) #查询大于等于22岁的人,mongodb不支持数学字符
db.test2.find('$or':[{age:22},{sex:'男'}]) 查询年龄为22或者性别是男的人
#删除
db.test2.remove({}) 删除所有
db.test2.remove({name:'xfy'}) 删除单个
#更新
db.test2.update({name:'stefan'},{'$inc':{age:20}}) #第一个参数是条件,第二个参数是修改值(stefan的age加20)
db.test2.update({},{'$inc':{age:2}},{multi:true}) #修改多条(第三个参数是设置修改多条)
$inc
对指定的键做加法操作,如果指定的关键不存在,则新创建这个键,并且赋值为$inc指定的值。$set
为指定的键赋值,如果指定的键不存在,则自动创建。设值的情况比较复杂,比如为内嵌文档的某个Key设值,复杂点在于需要指定MongoDB能够解析到指定Key的表达式$unset
$set
的反操作,即它用来清除一个Key及其值$push
对数组进行操作(在MongoDB中,只有Javascript数组一种集合类型,其它语言如Java的各种集合类型都会保存为Javascript的数组),$push
将一个元素追加到集合的末尾(不管这个元素是否存在于数组中),如果数组不存在,则首先创建数组$pushAll
$push
操作的批量版本,如果给$push
操作提供一个数组作为参数,那么$push认为是把整个数组作为一个元素加入到指定的数组末尾.$addToSet $pushAll
的去重版本,即$addToSet
实现了Java的Set集合的特性(Set中不能包含相同的元素)$pop
从数组中移除一个元素{$pop:{"key":1}}
从数组末尾删除;pop:{"key":-1}}
从数组开头删除;$pullAll $pull
的批量版本$rename
修改指定键的键名实际的使用不做赘述,因为我们有可视化工具RoboMongodb,下载解压版的,解压就能用。
from pymongo import MongoClient
方法一:
client = MongoClient() 默认连接本地的mongodb
方法二:
client = MongoClient('139.13.73.197',27017)
方法三:
client = MongoClient('mongodb://139.13.73.197:27017')
print("数据库",client.database_names())
#打印出数据库名,说明连接成功。
from pymongo import MongoClient
from bson.objectid import ObjectId
#连接mongodb
client = MongoClient('119.23.73.197',27017)
print("数据库",client.database_names())
print(client)
#选择数据库和集合
db=client['students']
collection=db.students
#新增数据:
##新增一条数据
stu={
'name':'徐凡',
'age':23,
'sex':'男'
}
#id=collection.insert(stu)
#print(id) #返回新增id
#objResult=collection.insert_one(stu) #InsertOneResult 但不是stu对象
#print(objResult)
#print(objResult.inserted_id)
#print(dir(objResult))# ['_InsertOneResult__acknowledged', '_InsertOneResult__inserted_id', '_WriteResult__acknowledged', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '_raise_if_unacknowledged', 'acknowledged', 'inserted_id']
##新增多条数据
stus=[
{
'name':'xfy23',
'age':23,
'sex':'男'
},
{
'name':'xfy13',
'age':23,
'sex':'男'
}
]
#objResults=collection.insert_many(stus)
#print(objResults.inserted_ids) # [ObjectId('5aa4ae242e970e031cbf64ec'), ObjectId('5aa4ae242e970e031cbf64ed')]
##查询数据
o=collection.find_one()
print(o)
#print(o['name'])
os=collection.find({'sex':'n'})
#print(os)# 0x0000018CF3035978>直接打印查询接口是不行的,但是他是一个迭代器,可遍历。
print([o for o in os])
##通过_id查询
oid=ObjectId('5aa492e8b56df811a42dc993')
one=collection.find_one({'_id':oid},{'_id':0})
#print(one)#{'name': 'zs', 'age': 23.0, 'sex': 'n'}
###修改
##修改单条
#result=collection.update_one({'name':'xfy23'},{'$inc':{'age':12}})
#print(result.matched_count)
#print(result.modified_count)
##修改多条
#results=collection.update_many({},{'$inc':{'age':22}})
#print(results.matched_count)
#print(results.modified_count)
###删除数据
result=collection.delete_one({'name':'xfy23'})
print(result.deleted_count)
result=collection.delete_many({'sex':'n'})
print(result.deleted_count)
相关知识以后再赘述。
有任何疑问请留言评论。