pymongo 安装与运用

by admin on 2019年9月3日

PyMongo安装使用笔记,pymongo安装使用

这里是简轻巧单的设置和动用记录,首先要有三个可用的mongo情状,win景况照旧linux情形都得以。
假定你对mongo有所明白和透亮有些命令行操作。

设置和换代
跟超越八分之四py包安装同样,能够源码安装,也足以动用pip大概easy_install来安装

安装
复制代码 代码如下:
pip install pymongo

升级
复制代码 代码如下:
pip install –upgrade pymongo

别的设置格局请参谋文档pymongo安装

操作

官方网站教程

小案例
复制代码 代码如下:
#-*- coding: utf-8 -*-
#python2.7x
#author: orangleliu  @2014-09-24
”’
pymongo的简要利用
”’

from pymongo import MongoClient

def get_db():
    #创设连接
    client = MongoClient(“localhost”, 27017)
    #test,还会有另外写法
    db = client.test
    return db

def get_collection(db):
   
#选拔集结(mongo中collection和database都以lazy创制的,具体能够google下)
    collection = db[‘posts’]
    print collection

def insert_one_doc(db):
    #安顿三个document
    posts = db.posts
    post = {“name”:”lzz”, “age”:25, “weight”:”55″}
    post_id = posts.insert(post)
    print post_id

def insert_mulit_docs(db):
    #批量布署documents,插入贰个数组
    posts = db.posts
    post = [ {“name”:”nine”, “age”:28, “weight”:”55″},
                 {“name”:”jack”, “age”:25, “weight”:”55″}]
    obj_ids = posts.insert(post)
    print obj_ids

##查询,能够对任何集合查询,能够根ObjectId查询,能够依附有个别字段查询等
def get_all_colls(db):
    #获得贰个数据库中的全数群集名称
    print db.collection_names()

def get_one_doc(db):
    #有就回来叁个,未有就回去None
    posts = db.posts
    print posts.find_one()
    print posts.find_one({“name”:”jack”})
    print posts.find_one({“name”:”None”})
    return

def get_one_by_id(db):
    #经过objectid来查究贰个doc
    posts = db.posts
    obj = posts.find_one()
    obj_id = obj[“_id”]
    print “_id 为ObjectId类型 :”
    print posts.find_one({“_id”:obj_id})
   
#亟需静心这里的obj_id是叁个对象,不是三个str,使用str类型作为_id的值不也许找到记录
    print “_id 为str类型 “
    print posts.find_one({“_id”:str(obj_id)})

    #能够由此ObjectId方法把str转成ObjectId类型
    from bson.objectid import ObjectId
    print “_id 转换成ObjectId类型”
    print posts.find_one({“_id”:ObjectId(str(obj_id))})

def get_many_docs(db):
    #mongo中提供了过滤查找的格局,能够透过各
    #种规格筛选来得到数据集,还足以对数据开展计数,排序等拍卖
    posts = db.posts
    #具有数据,按年龄排序, -1是倒序
    all =  posts.find().sort(“age”, -1)

    count = posts.count()
    print “集结中有着数据 %s个”%int(count)
    for i in all:
        print i

    #基准查询
    count = posts.find({“name”:”lzz”}).count()
    print “lzz: %s”%count
    for i in  posts.find({“name”:”lzz”, “age”:{“$lt”:20}}):
        print i

def clear_coll_datas(db):
    #清空贰个汇集中的全数数据
    db.posts.remove({})

if __name__ == “__main__”:
    db = get_db()
    obj_id = insert_one_doc(db)
    obj_ids = insert_mulit_docs(db)
    #get_all_colls(db)
    #get_one_doc(db)
    #get_one_by_id(db)
    #get_many_docs(db)
    clear_coll_datas(db)

那都以写轻巧的操作,至于集结操作,group操作等之后在计算。

这里是大概的设置和采纳记录,首先要有一个可用的mongo情状,win境况依然linux遇到都可以。
假定你对…

Linux 下的Python包安装比较实惠,使用pip命令就能够安装
若系统还未设置pip,可应用
sudo apt install pip
张开设置,在16.04从此可选用 apt 替换
apt-get,少打多个字符也是极好的

(1) mongodb的安装

(1) mongodb的安装

官网tutorial:  

安装

依然来看官方文书档案, Python MongoDB
Drivers
有:

  • Installation
  • Tutorial
  • API
    Documentation
  • Changelog
  • Source
    Code

先看
Installation

使用 python -m pip install pymongo
就能够安装新型版本,然后就设置到位了(就这个…)

下载tgz解压后,要求丰硕相应的境况变量能力在极限直接开行mongod。

下载tgz解压后,须要丰硕相应的遇到变量技术在终端直接开发银行mongod。

本学科就要告诉你怎么运用pymongo模块来操作MongoDB数据库。

非常快入门

mongodb数据存款和储蓄在/data/db中,需求手动创设目录树,同一时候mongod实践的时候假若权力相当不足(不能往/data/db写东西),须要改一下放权力力。

mongodb数据存款和储蓄在/data/db中,需求手动创建目录树,同期mongod实践的时候假若权力缺乏(不能够往/data/db写东西),须求改一下放权力力。

一、先决条件
    起先从前,大家须求分明计算机早就设置了pymongo和MongoDB.
    1.安装pymongo
          使用pip安装pymongo,在cmd命令行输入:
               pip install pymongo
          在python IDLE 中输入:import pymongo 未有报错表示安装成功。
    2.安装MongoDB
         参照他事他说加以考察那个链接:
         假如不设置MongoDB会油可是生后边的三个标题。

参见Tutorial
vim ~/.bashrc
export PATH="~/download/mongodb-linux-x86_64-ubuntu/bin:$PATH"

mkdir -p /data/db

ls -l / 查看data目录的权限,发现拥有者可写
ls -l /data 查看db目录的权限,发现拥有者可写
chown -R "liaohuqiang" /data data下的所有文件的拥有者改为自己 
vim ~/.bashrc
export PATH="~/download/mongodb-linux-x86_64-ubuntu/bin:$PATH"

mkdir -p /data/db

ls -l / 查看data目录的权限,发现拥有者可写
ls -l /data 查看db目录的权限,发现拥有者可写
chown -R "liaohuqiang" /data data下的所有文件的拥有者改为自己 

    3.MongoDB中的基本概念
  
 在MongoDB中基本的定义是文书档案(document)、集合(collection)、数据库(database).
  
 下图(盗的图)也许轻易领会MongoDB中的一些定义:

导入、连接与插入

# coding: utf-8

# 导入
from pymongo import MongoClient
# client 实例
client = MongoClient('localhost', 27017)
# 连接数据库
db = client.test_database
# 获取 collection
collection = db.test_collection

# 在Python中的字典(dict)可与JSON互转,因此插入时可直接使用dict
import datetime
post = {"author": "Mike",
...         "text": "My first blog post!",
...         "tags": ["mongodb", "python", "pymongo"],
...         "date": datetime.datetime.utcnow()}

# 使用 insert_one() 进行插入操作
posts = db.posts    # it's a collection
post_id = posts.insert_one(post).inserted_id
print post_id    # ObjectId('...')
# ''_id" 属性必须是唯一的
# 插入首个文档后,posts这个collection才真正被创建,可用以下命令查看
db.collection_names()    # [u'posts']

 

 

  图片 1

查找

# coding:utf-8

# find_one() 查找单个文档
# it is useful when you know there is only one matching document,
# or are only interested in the first match.
import pprint
pprint.pprint(posts.find_one())
'''
{u'_id': ObjectId('...'),
 u'author': u'Mike',
 u'date': datetime.datetime(...),
 u'tags': [u'mongodb', u'python', u'pymongo'],
 u'text': u'My first blog post!'}
'''

# find_one() 也可接受参数用于查找特定元素
posts.find_one({"author": "Eliot"})

# 注意ObjectId不是字符串类型,使用时需要转换
post_id_as_str = str(post_id)
posts.find_one({"_id": post_id_as_str})    # No result
# 应该这样
from bson.objectid import ObjectId
# The web framework gets post_id from the URL and passes it as a string
def get(post_id):
    # Convert from string to ObjectId:
    document = client.db.collection.find_one({'_id': ObjectId(post_id)})

(2) mongod的启动

(2) mongod的启动

  通过下图实例,可以越来越直观的的打听MongoDB中的一些定义:

关于unicode

PyMongo decodes each BSON string to a Python unicode string, not a
regular str.
You can read more about Python unicode strings
here.

自此就能够在终点上输入mongod,这年就开动了mongodb,但是那年是在巅峰运转着的,也正是三个前台进度,在那几个终端你无法做任何操作。

从此现在就能够在终端上输入mongod,那年就运营了mongodb,可是那个时候是在顶峰运行着的,约等于三个前台进度,在那几个极端你无法做任何操作。

  图片 2

使用 insert_many() 插入多少个

# insert_many() 接受list作为参数一次插入多个记录
>>> new_posts = [{"author": "Mike",
...               "text": "Another post!",
...               "tags": ["bulk", "insert"],
...               "date": datetime.datetime(2009, 11, 12, 11, 14)},
...              {"author": "Eliot",
...               "title": "MongoDB is fun",
...               "text": "and pretty easy too!",
...               "date": datetime.datetime(2009, 11, 10, 10, 45)}]
>>> result = posts.insert_many(new_posts)
>>> result.inserted_ids
[ObjectId('...'), ObjectId('...')]

new_posts[1] has a different “shape” than the other posts – there is
no “tags” field and we’ve added a new field, “title”. This is what we
mean when we say that MongoDB is schema-free.

留心五个文书档案的分裂之处,表明MongoDB是无模式数据库

能够使用–fork选项,开启后会回到终端交互,能够继续做和煦的事。

能够运用–fork选项,开启后会回到终端交互,能够持续做本人的事。

二、通过MongoClient创立三个延续
    开头接纳pymongo的首先步是创建叁个MongoClient,来运行mongod实例。
        >>> from pymongo import MongoClient
        >>> client = MongoClient()
   上边代码将会接连暗中认可的host和port。也可内定:
        >>> client = MongoClient(‘localhost’,27017)
   或者用MongoDB URI格式:
        >>> client =
MongoClient(‘mongodb://localhost:27017/’)
   暗中认可状态下Mongo顾客端是不曾加密的,不过一旦急需经过账户登录:
        >>> client =
MongoClient(‘mongodb://账号:密码@localhost:27017/’)

动用find() 查找八个

用法与find_one()一致,只是再次回到的数据分别

fork表示以守护进度的措施运营mongodb,成立一个服务器进度。fork要同盟logpath使用,表示日志音信输出到哪个日志文件。logappend表示以追加的格局写入日志文件。

fork表示以守护进程的主意运维mongodb,创制三个服务器进度。fork要合作logpath使用,表示日志音讯输出到哪个日志文件。logappend表示以充实的措施写入日志文件。

三、获取一个数据库
   
三个MongoDB实例能够支撑多少个独立的数据库。使用PyMongo时,能够透过会见MongoClient的习性的主意来拜望数据库。
        >>> db = client.test_database
   
如若数据库名字使用品质格局不可能访谈(像test-database),也足以通过拜会字典值的不二秘籍。
        >>> db = client[‘test-database’]

使用count()计数

posts.count()
posts.find({"author": "Mike"}).count()

理当如此还应该有别的运维方式,如今还没用到,一时先不说。

道理当然是那样的还会有别的运维格局,这段日子还没用到,一时半刻先不说。

四、获取三个Collection
   
三个collection是一组存在MongoDB中的文件(documents),差不离能够以为是关系型数据库中表的概念。
  获取Collection方法与收获数据库方法同样:
       >>> collection = db.test_collection
#注意连接符是_不是-
    或用字典方式:
       >>> collection = db[‘test-collection’]
   
要求细心的是,MongoDB里的collections(集合)和databases(数据库)都是惰性创造的,后边提到的兼具命令
    实际上未有对MongoDB
server举办任何操作。当第一个文件插入后,collections和databases才会被创建。

点名范围查找

有越来越多的高端找寻方法advanced
queries
比方来讲如下:
posts.find({"date": {"$lt": now}})

假如想设置成开机自动运维,就把这句加到/etc/rc.local中(把mongod指令换到mongod所在的任务,比方/home/liaohuqiang/download/mongodb3.4.5/bin/mongod)

假使想设置成开机自动运维,就把那句加到/etc/rc.local中(把mongod指令换来mongod所在的职位,比如/home/liaohuqiang/download/mongodb3.4.5/bin/mongod)

五、文件(Documents)
   
数据在MongoDB中是用JSON类文件的情势表示和保存起来的。在pymongo中用字典来代表文件。
    举个例子,下边这一个字典也许被用来表示一篇博客著作:
        >>> import datetime
        >>> post = {
                          “author”: “Mike”,
         ”text”: “My first blog post!”,
           ”tags”: [“mongodb”,”python”,”pymongo”],
         ”date”: datetime.datetime.utcnow()
         }
  注意,文件里能够包含python原生(native)类型(datetime.datetime实例),这几个类别的值会被机关在原生类型和BSON格式之间调换。

索引

result = db.profiles.create_index([('user_id', pymongo.ASCENDING)], unique=True)
print sorted(list(db.profiles.index_information()))
# [u'_id_', u'user_id_1']
mongod --fork --logpath ~/mongo.log --logappend
mongod --fork --logpath ~/mongo.log --logappend

六、插入一个文件(Inserting a Document)
    插入贰个文件到collection中,能够应用insert_one()方法。
        >>> posts = db.posts
        >>> post_id = posts.insert_one(post).inserted_id
        >>> post_id
        ObjectId(’57eb8f2177eddf292cbea0b3′)
   
当三个文件被插入贰个非凡的键值’_id’,即便文件内未有_id这几个键值,那么系统活动抬高几个到文件里。
   
那是叁个离奇键值,它的值在全部collection里是无与伦比的。insert()再次回到那个文件的_id值。
    插入第贰个公文后,那一个posts collection
就真正的在server上成立了。大家得以因此查看数据库上的
    所有collection来验证:
        >>>
db.collection_names(include_system_collections=False)
        [‘posts’]

API 文档

API
Documentation

 能够查阅mongod是不是运维

 能够查阅mongod是不是运行

七、获取单个文件 find_one()
   
在MongoDB中,最大旨的询问是find_one。这么些格局重回三个契合查询的文件,恐怕在一贯不相称的时候回来None。
   
当唯有一个文书符合条件的时候,大概只对第八个符合条件的文本感兴趣的时候,那几个艺术是很有用的。
    我们用find_one()来获取posts collection 里的首先个文件:
        >>> posts.find_one()
        {‘date’: datetime.datetime(2016, 9, 27, 3, 56, 26, 78000),
‘author’: ‘Mike’,
        ‘_id’: ObjectId(’57e9edea77eddf223cde3314′), ‘tags’:
[‘mongodb’, ‘python’, ‘pymongo’],
        ‘text’: ‘My first blog post!’}
    再次回到结果是二个我们在此以前插入的符合条件的字典类型值。
    注意,再次来到的文件里带有_id那几个键值,这是电动抬高的。
   
find_one()还援救对特定成分进行匹配的询问。限制大家文书档案的撰稿人是”迈克”,能够如此做:
       >>> posts.find_one({“author”:”Mike”})
       {‘date’: datetime.datetime(2016, 9, 27, 3, 56, 26, 78000),
‘author’: ‘Mike’,
       ‘_id’: ObjectId(’57e9edea77eddf223cde3314′), ‘tags’:
[‘mongodb’, ‘python’, ‘pymongo’],
       ‘text’: ‘My first blog post!’}
    假若大家用区别的撰稿人,比方:”Eliot”,将不会赢得结果。
        >>> posts.find_one({“author”:”Eliot”})
        >>>

sudo netstat -anp | grep "mongo"
sudo netstat -anp | grep "mongo"

八、按照ObjectId查询
    通过_id也能够扩充询问,在例子中正是ObjectId:
         >>> post_id
         ObjectId(’57eb54a877eddf292cbea0a8′)
         >>> posts.find_one({“_id”: post_id})
        {‘date’: datetime.datetime(2016, 9, 28, 5, 25, 53, 6000),
‘author’: ‘Mike’,
        ‘_id’: ObjectId(’57eb54a877eddf292cbea0a8′), ‘tags’:
[‘mongodb’, ‘python’],
        ‘text’: ‘My first blog post!’}
    注意:ObjectId 并不相同它的字符串格局。
       >>> post_id_as_str = str(post_id)
       >>> posts.find_one({“_id”: post_id_as_str}) #No
result
       >>>
   
在web应用的三个宽广任务正是在request的U昂CoraL里获取ObjectId,然后找到与之合作的公文。
    在本例中,必供给先从字符串转变为ObjectId,然后传给find_one:
    >>> from bson.objectid import ObjectId
    #从URL里获取post_id,然后把它当做字符串传入
    >>> def get(post_id):
           #将字符串转变为ObjectId
           document = client.db.collection.find_one({“_id”:
ObjectId(post_id)})
    小插曲:
   
MongoDB以BSON格式保存数据。BSON字符串都是UTF-8编码的,所以pymongo必需确认保证它保存的字符串值
    包涵有效地UTF-8数据.常规字符串(<type
‘str’>)都以实用的,能够不改造一向保存。
    Unicode字符串(<type ‘unicode’>)就必要先编码成UTF-8格式。

 

 

九、批量插入
   
为了让查询更有趣,大家多插入多少个公文。除了单个文件插入,也能够由此给insert_many()方法传入
    三个列表(list),作为该方法的首先个参数,举行批量布署操作。
   
那将会插入列表(list)中的每一个文件(document)到会集中去,何况只向server发送一条命令:
          new_posts = [{“author”: “Mike”,
              “text”: “Another post!”,
            “tags”: [“bulk”, “insert”],
            “date”: datetime.datetime(2009, 11, 12, 11, 14)
           },
          {“author”: “Eliot”,
            “title”: “MongoDB is fun”,
            “text”: “and pretty easy too!”,
           “date”: datetime.datetime(2009, 11, 10, 10, 45)
          }]
    >>> result = posts.insert_many(new_posts)
    >>> result.inserted_ids
    [ObjectId(’57eb700b77eddf292cbea0a9′),
ObjectId(’57eb700b77eddf292cbea0aa’)]
    这么些例子里有部分相比较风趣的地点:
    insert_many()今后回来八个ObjectId实例,每一种代表四个铺排的文书。
   
new_posts[1]与别的的posts内容格式差别样,里面未有”tags”。其他大家扩张了叁个新的“title”域。那正是MongoDB所关联的无schema特点。

 

 

十、查询几个文本
   
为了取得更加多的公文,大家运用find()方法。find()重临一个Cursor实例,可使咱们遍历全部相称的公文。
    比方遍历种种posts collection里的文件:
         >>> for post in posts.find():
     post
   
与使用find_one()时候一样,能够流传二个文件来限制查询结果。比方查询我”Mike”
文件:
   >>> for post in posts.find({“author”:”Mike”}):
        post

(3)mongo的使用

(3)mongo的使用

十一、文件数量(Counting)
   
若是只想理解符合查询条件的公文有稍许,能够用count()操作,而没供给进行全体的询问。
    查询collection的文件总量:
         >>> posts.count()
         11
    只怕只是查询部分一定文件数量:
        >>> posts.find({“author”: “Mike”}).count()
        10

开行mongod后就足以在终点走入mongo进行相关数据库操作

运行mongod后就足以在顶峰步入mongo举办相关数据库操作

十二、限定范围的查询
   
MongoDB协助多种尖端查询。举例大家根据时间(小于某些时间)来查询,结果按我名参数来排序:
        >>> d = datetime.datetime(2009,11,12,12)
        >>> for post in
posts.find({“date”:{“$lt”:d}}).sort(“author”):
                     print(post)
   {‘date’: datetime.datetime(2009, 11, 10, 10, 45), ‘author’:
‘Eliot’, ‘text’: ‘and pretty easy too!’, ‘_id’:
ObjectId(’57eb700b77eddf292cbea0aa’),        ‘title’: ‘MongoDB is
fun’}
   {‘date’: datetime.datetime(2009, 11, 12, 11, 14), ‘author’:
‘Mike’, ‘_id’: ObjectId(’57eb700b77eddf292cbea0a9′), ‘tags’: [‘bulk’,
‘insert’],                ‘text’: ‘Another post!’}
   
这里运用了特种的”$lt”操作符来进展限定查询,并调用sort()方法,对结果根据笔者参数排序。

show dbs 显示所有数据库
use doctor 切换到某个数据库"doctor", 不切换的话默认使用test

db.dropDatabase() 删除数据库
show collections 显示所有集合
db.sample.drop() 删除集合

db.sample.insert({name:"pilgrimHui", label:"1"})  插入一行记录
db.sample.insert({...}) 如果文档已存在,会更新_id,不存在则同insert

db.sample.find({...}) 查找满足条件的记录,简单的一些查询条件见下面
db.sample.find({...},{field1:1, field2:1}) 只找出某些字段
db.sample.find() 查找sample集合所有记录

db.sample.remove({...},1) 删除满足条件的记录,参数1可选,代表只删除1个
db.sample.remove({}) 删除sample集合的所有记录
show dbs 显示所有数据库
use doctor 切换到某个数据库"doctor", 不切换的话默认使用test

db.dropDatabase() 删除数据库
show collections 显示所有集合
db.sample.drop() 删除集合

db.sample.insert({name:"pilgrimHui", label:"1"})  插入一行记录
db.sample.insert({...}) 如果文档已存在,会更新_id,不存在则同insert

db.sample.find({...}) 查找满足条件的记录,简单的一些查询条件见下面
db.sample.find({...},{field1:1, field2:1}) 只找出某些字段
db.sample.find() 查找sample集合所有记录

db.sample.remove({...},1) 删除满足条件的记录,参数1可选,代表只删除1个
db.sample.remove({}) 删除sample集合的所有记录

十三、索引(Indexing)
   
加多索引能够协理加速有些查询,也能够增加额外的效应来询问和仓库储存文件。
   
在那个示例中,大家将演示咋样在七个键上创造三个独一索引,那么些目录将不容–那多少个以前在目录中留存该键值的文本。
    首先,大家需求创建贰个目录:
        >>> result =
db.profiles.create_index([(‘user_id’,pymongo.ASCENDING)],unique =
True)
        >>> result
        ‘user_id_1’
       >>> list(db.profiles.index_information())
        [‘_id_’, ‘user_id_1’]
   注意:将来我们有四个目录,贰个索引 _id是MongoDB本身创建的。别的贰个user_id是我们正好创造的。
   以后,让我们建构部分客户配置文件:
  >>> user_profiles =
[{‘user_id’:211,’name’:’Luke’},{‘user_id’:212,’name’:’Ziltoid’}]
  >>> result = db.profiles.insert_many(user_profiles)
 该索引可避防止大家的user_id已经插入集合中的文书档案:
  >>> new_profile = {‘user_id’: 213, ‘name’: ‘Drew’}
  >>> duplicate_profile = {‘user_id’: 212, ‘name’:
‘Tommy’}
  >>> result = db.profiles.insert_one(new_profile) # This
is fine.
  >>> result = db.profiles.insert_one(duplicate_profile)
  Traceback (most recent call last):
  pymongo.errors.DuplicateKeyError: E11000 duplicate key error
collection: test_database.profiles index: user_id_1 dup key: { : 212
}
    关于索引的MongoDB文书档案链接:

 

 

问题:
  1.pymongo.errors.ServerSelectionTimeoutError: localhost:27017:
[WinError 10061] 由于目的Computer积极拒绝,不可能连接。

(4) mongo里的update操作

(4) mongo里的update操作

 
  原因:未装MongoDB大概MongoDB服务未有开启。(那一个错误找了很短日子,哎。。。)
        参考链接:

db.collection.update(criteria, objNew, upsert, multi)
criteria: 查询条件,理解为sql update语句where后面的
objNew: 更新操作,理解为sql update语句set后面的
upsert: 如果不存在查询到的记录,是否插入。默认false,不插入
multi: 是否更新多条。默认false,只更新第一条。

# 例如:把集合里所有记录的status改为0
db.sample.update({"status": {$ne: 0} }, {$set: {"status":0}}, {multi: true})
或者
db.sample.update({"status": {$ne: 0} }, {$set: {"status":0}}, false,true)
db.collection.update(criteria, objNew, upsert, multi)
criteria: 查询条件,理解为sql update语句where后面的
objNew: 更新操作,理解为sql update语句set后面的
upsert: 如果不存在查询到的记录,是否插入。默认false,不插入
multi: 是否更新多条。默认false,只更新第一条。

# 例如:把集合里所有记录的status改为0
db.sample.update({"status": {$ne: 0} }, {$set: {"status":0}}, {multi: true})
或者
db.sample.update({"status": {$ne: 0} }, {$set: {"status":0}}, false,true)

  2.在数据仓库储存入了文本,怎样查看呢?就需求动用MongoDB可视化学工业具了。

 

 

    1)MongoBooster(已用)
      下载地址:
    2)Robomongo
      下载地址:

(4) 多少个查询操作符

(4) 几个查询操作符

$ne 不等
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$in和$nin 是否在指定数组中
$all 是否全在指定数组中
$or 将数组中的多个键值对或运算
$slice:[1,2] 切片,取属性值(数组)的某几个
$size 该属性值(数组)的长度
$exists:true 选择该字段存在的记录
$not 对任何查询操作符取非
$regex 使用正则表达式匹配
$ne 不等
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$in和$nin 是否在指定数组中
$all 是否全在指定数组中
$or 将数组中的多个键值对或运算
$slice:[1,2] 切片,取属性值(数组)的某几个
$size 该属性值(数组)的长度
$exists:true 选择该字段存在的记录
$not 对任何查询操作符取非
$regex 使用正则表达式匹配

 

 

(5) 多少个立异操作符

(5) 多少个立异操作符

{ $inc : { field : value } }
{ $set : { field : value } }
{ $unset : { field : 1} } 
{ $push : { field : value } } 追加,field要是数组
{ $pull : { field : value } }  和push相反
{ $pop : { field : 1 } } 删除最后1个值
{ $pop : { field : -1  } } 删除第1个值 
{ $currentDate: { <field1>: {$type:"date", ... } } 设定当前时间
{ $rename: {<field1>:<newName1>,<field2>:<newName2>,...} } 重命名字段
{ $inc : { field : value } }
{ $set : { field : value } }
{ $unset : { field : 1} } 
{ $push : { field : value } } 追加,field要是数组
{ $pull : { field : value } }  和push相反
{ $pop : { field : 1 } } 删除最后1个值
{ $pop : { field : -1  } } 删除第1个值 
{ $currentDate: { <field1>: {$type:"date", ... } } 设定当前时间
{ $rename: {<field1>:<newName1>,<field2>:<newName2>,...} } 重命名字段

 

 

(6) 客商权限设置

(6) 顾客权限设置

mongodb暗中同意未有帐号登陆,必要和谐先增添帐号。

mongodb暗许未有帐号登陆,须要本人先增添帐号。

在admin数据库加多的帐号为总指挥帐号,在另外数据库加多的帐号为普通客户

在admin数据库加多的帐号为总指挥帐号,在任何数据库增多的帐号为普通客户

顾客只好在客户所在的数据库登入,富含管理员。

客户只可以在客户所在的数据库登陆,包含管理员。

领队只好在admin登入认证后能力管住其余数据库。

领队只好在admin登入认证后本事处理其余数据库。

6.1 增添助理馆员帐号

6.1 增多管理员帐号

use admin
db.system.users.find()
db.addUser('liaohuqiang','liaohuqiang')  # 添加管理员用户,mongodb版本不同,可能会报错,如果报错找不到addUser则用下面这个

db.createUser(
  {
    user: 'liaohuqiang',
    pwd: 'liaohuqiang',
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

# 版本不同的问题:以上createUser在2.4.9中有用。
# 但是我在自己电脑3.4.5中创建后的用户,无法在其它数据库中使用,这个时候用另一个roles就可以了。
db.createUser({user:"admin",pwd:"password",roles:["root"]})

# 不同版本的授权有所不同,这个需要自行留意。
use admin
db.system.users.find()
db.addUser('liaohuqiang','liaohuqiang')  # 添加管理员用户,mongodb版本不同,可能会报错,如果报错找不到addUser则用下面这个

db.createUser(
  {
    user: 'liaohuqiang',
    pwd: 'liaohuqiang',
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

# 版本不同的问题:以上createUser在2.4.9中有用。
# 但是我在自己电脑3.4.5中创建后的用户,无法在其它数据库中使用,这个时候用另一个roles就可以了。
db.createUser({user:"admin",pwd:"password",roles:["root"]})

# 不同版本的授权有所不同,这个需要自行留意。

 6.2 重新起动mongod

 6.2 重新开动mongod

开创成功后重启mongod,这一年开启连接能够带上–auth选项,代表表明客户权限。

始建成功后重启mongod,那一年张开连接能够带上–auth选项,代表表达客商权限。

mongod --fork --logpath ~/mongo.log --logappend --auth
mongod --fork --logpath ~/mongo.log --logappend --auth

6.3 认证登陆

6.3 认证登陆

张开后,直接mongo进去操作会受限,能够mongo连接时授权登陆;也得以接连进去后再作证。

开启后,间接mongo进去操作会受限,能够mongo连接时授权登入;也能够连接进去后再作证。

mongo -u liaohuqiang -p --authenticationDatabase admin
mysql -h ip -u root -p 乱入,对比一下mysql的连接


mongo
use admin
db.auth('liaohuqiang', 'liaohuqiang')
mongo -u liaohuqiang -p --authenticationDatabase admin
mysql -h ip -u root -p 乱入,对比一下mysql的连接


mongo
use admin
db.auth('liaohuqiang', 'liaohuqiang')

6.4 关闭连接

6.4 关闭连接

注解登入后就能够像在此之前那样操作数据库了,操作完后得以在admin数据库关闭连接。

表达登陆后就能够像此前那么操作数据库了,操作完后得以在admin数据库关闭连接。

use admin 
db.shutdownServer() 关闭mongod
use admin 
db.shutdownServer() 关闭mongod

 

 

(7) pymongo的接连和平运动用

(7) pymongo的连天和接纳

import pymongo

client=pymongo.MongoClient('mongodb://username:password@ip')
db=client['doctor']
users=db["user"]


result= list(users.find( {'role':1}, {'_id':0} ) ) 选多个
result= users.find_one({"name":name}) 选单个

users.insert_one({"name":name}) 插一个,会自动生成主键

users.remove( {"name":name}, {"multi":True} ) 删多个
users.update_one({'name':name},{'$inc':{'commitCount':1}}) 改一个
import pymongo

client=pymongo.MongoClient('mongodb://username:password@ip')
db=client['doctor']
users=db["user"]


result= list(users.find( {'role':1}, {'_id':0} ) ) 选多个
result= users.find_one({"name":name}) 选单个

users.insert_one({"name":name}) 插一个,会自动生成主键

users.remove( {"name":name}, {"multi":True} ) 删多个
users.update_one({'name':name},{'$inc':{'commitCount':1}}) 改一个

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图