# coding=utf-8
import pymongo
from pymongo import MongoClient
from datetime import datetime
import traceback
class MongodbClient(object):
"""
for details: http://www.runoob.com/mongodb/mongodb-operators-type.html
"""
def __init__(self,uri,port):
self.client = MongoClient(uri, port)
def insert_one(self, database, collection, document):
"""
:param database: 数据库名
:param collection: 集合名(表名)
:param document: 文档(行)
:return:
"""
if not isinstance(document, dict):
raise Exception("document %s is not json" % document)
try:
col = self.client[database][collection]
_id = col.insert_one(document).inserted_id
print("insert success with _id: %s" % _id)
except Exception as e:
print(traceback.format_exc(e))
return True
def query_collection_names(self, database, include_system_collections=False):
"""
查询数据库中存在的表名
:param database:
:param include_system_collections:
:return:
"""
collection_names = self.client[database].collection_names(include_system_collections=include_system_collections)
return collection_names
def find_one(self, database, collection, condition={}):
"""
:param database:
:param collection:
:param condition: 字典,精准查询需要以 _id 为key值
:return:
"""
return self.client[database][collection].find_one(condition)
def insert_many(self,database, collection, document_list):
try:
result = self.client[database][collection].insert_many(document_list)
print("Bulk Inserts Result is :", result.inserted_ids)
except Exception as e:
print(traceback.format_exc(e))
return True
def find(self,database, collection, condition={}, sort=None):
"""
:param database:
:param collection:
:param condition: 支持多种类型的操作
操作 格式 范例 RDBMS中的类似语句
等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50
AND 条件,直接写在同一层级中即可,如
db.col.find({key1:value1, key2:value2}).pretty()
OR 条件 $or
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
$type 操作符
AND 和 OR 联合使用 'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
:param sort:
:return:
"""
ret = self.client[database][collection].find(condition)
if sort is not None:
ret = ret.sort(sort)
return ret
def count(self):
"""
find_one
find
client[database]
client[database][collection]
的返回值都可以直接使用 .count() 方法统计数目
:return:
"""
pass
def create_index(self, database, collection):
try:
result = self.client[database][collection].create_index([('user_id', pymongo.ASCENDING)], unique=True)
print("index create result is :", result.inserted_ids)
except Exception as e:
print(traceback.format_exc(e))
return True
def query_index_information(self, database, collection):
return sorted(list(self.client[database][collection].index_information()))
if __name__ == "__main__":
mc = MongodbClient("192.168.216.129",27017)
doc = {
"name":"姚慧",
"age": 27,
"date": datetime.utcnow()
}
# mc.insert_one("test","posts",doc)
# mc.query_collection_names("test")
# print(mc.find_one("test","posts",condition={"age":15}))
docs = [{
"name": "姚慧",
"age": 26,
"date": datetime.utcnow()
},{
"name": "yaohui"
}]
mc.insert_many("test", "posts", docs)
mongodb python client basically version
最新推荐文章于 2023-08-04 00:26:51 发布