一文说通MongoDB via Python操作 (2)

此外,PyMongo还提供了另外两个方法:insert_one和insert_many,对应创建一条数据和多条数据。

result = collection.insert_one(article1)
result = collection.insert_many([article1, article2])

这两个方法返回值与insert返回值略有不同,返回的是个对象。

insert_one返回InsertOneResult,InsertOneResult.inserted_id才是_id值。

insert_many返回InsertManyResult,InsertManyResult.inserted_ids是_id的列表。

6. 查询数据

查询数据有两个方法:find_one和find。

先说find_one,看名称就知道,是查一条文档数据,返回结果是一个字典类型的记录。

result = collection.find_one({"article_id"1})
print(type(result))
print(result)

输出结果:

<class 'dict'>
{'_id': ObjectId('5efb1ecc7ca7cd50ed1150ed'), 'article_id': 1, 'title''文章标题1''body''文章内容1''action_time': datetime.datetime(2020, 6, 30, 11, 15, 24, 97000)}

当然也可以使用_id查询:

from bson.objectid import ObjectId

result = collection.find_one({'_id': ObjectId('5efb1ecc7ca7cd50ed1150ed')})

find方法,用来查询多条数据。

results = collection.find({"title": {"$ne":""}})
print(type(results))
print(results)
for result in results:
    print(result)

输出结果:

<class 'pymongo.cursor.Cursor'>
<pymongo.cursor.Cursor object at 0x7f82c2cf7d50>
{'_id': ObjectId('5efb1ecc7ca7cd50ed1150ed'), 'article_id': 1, 'title''文章标题1''body''文章内容1''action_time': datetime.datetime(2020, 6, 30, 11, 15, 24, 97000)}
{'_id': ObjectId('5efb1ecc7ca7cd50ed1150ee'), 'article_id': 2, 'title''文章标题2''body''文章内容2''action_time': datetime.datetime(2020, 6, 30, 11, 15, 24, 97000)}

能看出,find查询的结果是一个游标cursor,指向返回的数据集合。数据可以循环读出。

7. 结果统计

统计查询结果有多少条数据,PyMongo提供了一个count方法:

results = collection.find({"title": {"$ne":""}}).count()

或者查整个数据集的数据:

results = collection.find().count()
8. 排序查询

排序也是一个方法,sort:

results = collection.find({"title": {"$ne":""}}).sort("action_time", pymongo.ASCENDING)

升序是pymongo.ASCENDING,降序是pymongo.DESCENDING。

9. 偏移和限定

两个用处不大不小的功能,通常在一起用,当然分开也没关系。

results = collection.find({"title": {"$ne":""}}).sort("action_time", pymongo.DESCENDING).skip(1).limit(1)

limit限定了结果集取多少条数据,而skip则决定跳过多少条数据后去取。

在数据量不大的情况下,可以用来做分页。而如果数据量很大,这种方式效率不高,更好的做法是记住前一个页的最后一条数据的关键值,例如_id,查询时取条件大于这个值的数据。

10. 更新数据

PyMongo提供了两个更新数据的方法:update_one和update_many。代码是这样的:

filter = {"article_id"1}
update = {"$set": {"body""新的文章内容"}}
result = collection.update_one(filter, update)
print(type(result))

返回一个对象UpdateResult,里面包含更新结果的全部信息。

注意:这儿有个不同于传统SQL的地方,一定要注意。当更新的条件匹配到多条数据时,update_one只会更新匹配到的数据集中第一条数据,update_many可以更新匹配到的全部数据。所以,如果用update_one,除非是你本意,一定要确定条件匹配到的数据唯一。

11. 删除数据

也同样有两个方法:delete_one和delete_many。用法和更新相似:

filter = {"article_id"1}
result = collection.delete_one(filter)
print(type(result))

同样的,delete_one也只会删除匹配到的数据集中第一条数据。

11. 原子级处理

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdxzy.html