18、使用mongodb
<p><a href="https://www.cnblogs.com/lovele-/p/9179423.html">https://www.cnblogs.com/lovele-/p/9179423.html</a>
关闭服务:参考:<a href="https://blog.csdn.net/fabulous1111/article/details/80102017">https://blog.csdn.net/fabulous1111/article/details/80102017</a></p>
<pre><code>在操作数据库的终端输入use admin后再输入db.shutdownServer()
或者在mongodb启动的终端cntrol+c即可</code></pre>
<p>第一步,连接MongoDB</p>
<p> 我们通过PyMongo库里的MongoClient。其中第一个参数 host 是mongodb的地址,第二个参数是端口 port (不传参数的话默认是27017) </p>
<pre><code>client = pymongo.MongoClient(host='127.0.0.1',port=27017)</code></pre>
<p> 另一种方法是直接传递MongoDB的连接字符串,以 mongodb 开头。</p>
<pre><code>client = pymongo.MongoClient('mongodb://127.0.0.1:27017/')</code></pre>
<p> 第二步,选择数据库或集合</p>
<p> 在MongoDB中可以建立多个数据库,其中每个数据库又包含许多集合,类似于关系数据库中的表。选择数据库有两种方法,这两种方法作用相同。</p>
<pre><code>db = client.test # test数据库
db = client['test']</code></pre>
<p> 选择好数据库后我们需要指定要操作的集合,与数据库的选择类似。</p>
<pre><code>p = db.persons # persons集合
p = db['persons']</code></pre>
<p> 第三步,添加数据</p>
<pre><code>person = {
'id':'00001',
'name':'Abc',
'age':19
}
result = p.insert(person)
# 在PyMongo 3.x版本后,官方推荐使用insert_one(),该方法返回的不再是单纯的_id值,我们需要执行result.inserted_id查看 _id 值
print(result)</code></pre>
<p> 此处通过对象的 insert() 方法添加了一条数据,添加成功后返回的是数据插入过程中自动添加的 _id 属性值,这个值是唯一的。另外我们还可以添加多条数据,它以列表的形式进行传递。</p>
<pre><code>person = {
'id':'00001',
'name':'Abc',
'age':19
}
person1 = {
'id':'00002',
'name':'Dfg',
'age':20
}
result = p.insert([person,person1])
# 推荐使用 insert_many() 方法,之后使用 result.inserted_ids 查看插入数据的 _id 列表
print(result)</code></pre>
<p> 第四步,查询数据</p>
<p> 查询数据我们可以使用 find_one() 或 find() 方法,其中 find_one() 得到的是单个数据结果,find() 返回的是一个生成器对象。</p>
<pre><code>res = p.find_one({'name':'Abc'}) # 查询 name 为 Abc 的人的信息,返回字典型的数据
print(res)</code></pre>
<p> find() 则用来查询多条数据,返回 cursor 类型的生存器,我们要遍历取得所有的数据结果。</p>
<pre><code>res = p.find({'age':20}) # 查询集合中age是20的数据
# res = p.find({'age':{'$gt':20}}) # 查询集合中age大于20的数据
print(res)
for r in res:
print(r)</code></pre>
<p><a href="https://images2018.cnblogs.com/blog/1367352/201806/1367352-20180613180511326-1823746236.png"><img src="https://images2018.cnblogs.com/blog/1367352/201806/1367352-20180613180511326-1823746236.png" alt="" /></a></p>
<p>要统计查询的结果一共有多少条数据,需要使用 count() 方法</p>
<pre><code>count = p.find().count() # 统计集合中所有数据条数</code></pre>
<p> 排序则直接调用 sort() 方法,根据需求传入升序降序标志即可</p>
<pre><code> res = p.find().sort('age',pymongo.ASCENDING) # 将集合中的数据根据age进行排序,pymongo.ASCENDING表示升序,pymongo.DESCENDING表示降序</code></pre>
<p> 当我们只需要取得几个元素时,我们可以使用 skip() 方法偏移几个位置,得到去掉偏移个数之后剩下的元素数据</p>
<pre><code>res = p.find({'name':{'$regex':'^A.*'}}).skip(2)
print([ r['name'] for r in res ]) # 打印name以A开头的数据的名称name,从第三个显示</code></pre>
<p> 第五步,更新数据</p>
<p> 更新数据我们使用 update() 方法实现,并指定更新的条件和需要更新的数据即可。</p>
<pre><code>where = {'name':'Abc'}
res = p.find_one(where)
res['age'] = 25
result = p.update(where, res) # 推荐使用 update_one() 或 update_many()
print(result)</code></pre>
<p> 返回的是一个字典形式的数据,{'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True},其中 ok 表示执行成功,nModified 表示影响的数据条数。</p>
<p> 另外我们还可以使用 $set 操作符对数据进行更新。使用$set则只更新字典内存在的字段,其它字段则不更新,也不删除。如果不用则会更新所有的数据,而其它存在的字段则会被删除。</p>
<pre><code>where = {'age':{'$gt':20}}
result = p.update_many(where,{'$inc':{'age':1}}) # 将集合中年龄大于20的第一条的数据年龄加1
print(result)
print(result.matched_count,result.modified_count) # 获取匹配的数据条数,影响的数据条数</code></pre>
<p> 第六步,删除数据</p>
<p> 删除数据可以调用 remove() 方法,需要指定删除条件。</p>
<pre><code>result = p.remove({'name':'Abc'}) # 删除名称为Abc的数据,推荐使用 delete_one() 和 delete_many(),执行后调用 result.delete_count,获得删除的数据条数</code></pre>
<p> 返回的是一条字典型数据,{'ok':1,'n':1}</p>
<p> 另外,我们还可以对索引进行操作,比如 create_index() 创建单个索引,create_indexes()创建多个索引,drop_index()删除索引等方法。</p>
<p>参考:静觅博客 <a href="https://cuiqingcai.com/5584.html">https://cuiqingcai.com/5584.html</a> </p>