mongodb的基本命令和python操作mongodb

简述:

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

linux安装mongodb的步骤不再赘述,也就是一条命令而已,安装好mongodb后,如果想远程连接,要找到/etc/mongodb.conf,将配置文件中的bind_ip=127.0.0.1 这一行注释掉或者是修改成 bind_ip=0.0.0.0

在linux中操作mongodb

输入mongo进入mongodb,这也是检验mongodb是否安装成功。

基本的CRUD

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}) #修改多条(第三个参数是设置修改多条)

mongodb的修改器:

  • $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}}从数组开头删除;
  • $pull 从数组中移除指定的元素
  • $pullAll $pull的批量版本
  • $rename 修改指定键的键名

实际的使用不做赘述,因为我们有可视化工具RoboMongodb,下载解压版的,解压就能用。

python操作连接mongodb

连接mongodb

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())
#打印出数据库名,说明连接成功。

基本的CURD

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)# <pymongo.cursor.Cursor object at 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)

python ODM

相关知识以后再赘述。

有任何疑问请留言评论。

猜你喜欢

转载自blog.csdn.net/weixin_36586120/article/details/79516141