mongodb python client basically version

菜鸟教程详细教程

# 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值