zoukankan      html  css  js  c++  java
  • [Database] MongoDB (1) 基本连接、操作、查询

      MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。它的特点是高性能、易部署、易使用,存储数据非常方便。

    主要功能特性有:
      *面向集合存储,易存储对象类型的数据。
      *模式自由。
      *支持动态查询。
      *支持完全索引,包含内部对象。
      *支持查询。
      *支持复制和故障恢复。
      *使用高效的二进制数据存储,包括大型对象(如视频等)。
      *自动处理碎片,以支持云计算层次的扩展性
      *支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
      *文件存储格式为BSON(一种JSON的扩展)
      *可通过网络访问

    所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,
    并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。
    模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
    存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。
    我们称这种存储形式为BSON(Binary Serialized dOcument Format)。

    MongoDB 简单使用
    联接数据库

    In [1]: import pymongo
    In [
    2]: from pymongo import Connection
    In [
    3]: connection = Connection('192.168.1.3', 27017) //创建联接

    Connection 相关参数
    Connection([host='localhost'[, port=27017[, pool_size=None[, auto_start_request=None[, timeout=None[, slave_okay=False[, network_timeout=None[, document_class=dict[, tz_aware=True]]]]]]]]])

     

    数据库操作

    代码
    In [9]: c.database_names() //列出所有数据库名称
    Out[
    9]: [u'test', u'admin', u'yuhen', u'sms', u'local']

    In [
    10]: c.server_info() //查看服务器相关信息
    Out[
    10]:
    {u
    'bits': 64,
    u
    'gitVersion': u'nogitversion',
    u
    'ok': 1.0,
    u
    'sysInfo': u'Linux yellow 2.6.24-27-server #1 SMP Fri Mar 12 01:23:09 UTC 2010 x86_64 BOOST_LIB_VERSION=1_40',
    u
    'version': u'1.2.2'}

    In [
    16]: db = c['test'] //选择数据库
    In [
    17]: db.collection_names() //列出当前数据库中所有集合名称
    Out[
    17]: [u'system.indexes', u'fs.files', u'fs.chunks', u'test_gao']

    In [
    23]: db.connection //查看联接信息
    Out[
    23]: Connection('192.168.1.3', 27017)

    In [
    24]: db.create_collection('test_abeen') //创建新集合
    Out[
    24]: Collection(Database(Connection('192.168.1.3', 27017), u'test'), u'test_abeen')

    In [
    25]: db.last_status() //查看上次操作状态
    Out[
    25]: {u'err': None, u'n': 0, u'ok': 1.0}

    In [
    26]: db.name //查看当前数据库名称
    Out[
    26]: u'test'

    In [
    27]: db.profiling_info() //查看配置信息
    Out[
    27]: []

    In [
    28]: db.profiling_level()
    Out[
    28]: 0.0

    集合操作

    代码
    In [31]: db.collection_names() //查看当前数据库所有集合名称
    Out[
    31]:
    [u
    'system.indexes',
    u
    'fs.files',
    u
    'fs.chunks',
    u
    'test_gao',
    u
    'system.users',
    u
    'test_abeen']

    In [
    32]: c = db.test_abeen //选择集合
    In [
    33]: c.name //查看当前集合名称
    Out[
    33]: u'test_abeen'

    In [
    35]: c.full_name //查看当前集合全名
    Out[
    35]: u'test.test_abeen'
    In [
    36]: c.database //查看当前集合数据库相关信息
    Out[
    36]: Database(Connection('192.168.1.3', 27017), u'test')

    In [
    38]: post = {"author":"Mike","text":"this is a test by abeen"}
    In [
    39]: posts = db.posts
    In [
    40]: posts.insert(post) //向数据库集合插入文档,默认创建集合
    Out[
    40]: ObjectId('4c358492421aa91e70000000')
    In [
    41]: db.collection_names() //显示所有集合名称
    Out[
    41]:
    [u
    'system.indexes',
    u
    'fs.files',
    u
    'fs.chunks',
    u
    'test_gao',
    u
    'system.users',
    u
    'test_abeen',
    u
    'posts']

    In [
    42]: posts.find_one() //从集合查找信息
    Out[
    42]:
    {u
    '_id': ObjectId('4c358492421aa91e70000000'),
    u
    'author': u'Mike',
    u
    'text': u'this is a test by abeen'}
    In [
    52]: p.update({"author":"Mike"},{"$set":{"author":"abeen","text":"this is a test by abeen shan shan"}})//更新集合文档信息
    In [
    55]: list(p.find())
    Out[
    55]:
    [{u
    '_id': ObjectId('4c358492421aa91e70000000'),
    u
    'author': u'abeen',
    u
    'text': u'this is a test by abeen shan shan'}]

    In [
    96]: list(posts.find())
    Out[
    96]:
    [{u
    '_id': ObjectId('4c358492421aa91e70000000'),
    u
    'author': u'Mike',
    u
    'text': u'this is a test by abeen'},
    {u
    '_id': ObjectId('4c358ad4421aa91e70000002'), u'a': u'aa', u'b': u'bb'},
    {u
    '_id': ObjectId('4c358ad9421aa91e70000003'), u'a': u'aa', u'b': u'bb'},
    {u
    '_id': ObjectId('4c358abb421aa91e70000001'),
    u
    'a': u'abeen',
    u
    'b': u'this bb is updated'}]
    In [
    97]: posts.remove({"a":"abeen"}) //删除符合条件的文档
    In [
    98]: list(posts.find())
    Out[
    98]:
    [{u
    '_id': ObjectId('4c358492421aa91e70000000'),
    u
    'author': u'Mike',
    u
    'text': u'this is a test by abeen'},
    {u
    '_id': ObjectId('4c358ad4421aa91e70000002'), u'a': u'aa', u'b': u'bb'},
    {u
    '_id': ObjectId('4c358ad9421aa91e70000003'), u'a': u'aa', u'b': u'bb'}]

    In [
    102]: db.collection_names()
    Out[
    102]:
    [u
    'system.indexes',
    u
    'fs.files',
    u
    'fs.chunks',
    u
    'test_gao',
    u
    'system.users',
    u
    'test_abeen',
    u
    'posts',
    u
    'doc_abeen']

    In [
    104]: db.drop_collection("doc_abeen") //删除集合
    In [
    105]: db.collection_names()
    Out[
    105]:
    [u
    'system.indexes',
    u
    'fs.files',
    u
    'fs.chunks',
    u
    'test_gao',
    u
    'system.users',
    u
    'test_abeen',
    u
    'posts']
    代码
    In [113]: result = db.posts.find({"a":"aa"})//查找
    In [
    114]: type(result)
    Out[
    114]: <class'pymongo.cursor.Cursor'>
    In [
    119]: list(result)
    Out[
    119]:
    [{u
    '_id': ObjectId('4c358ad4421aa91e70000002'), u'a': u'aa', u'b': u'bb'},
    {u
    '_id': ObjectId('4c358ad9421aa91e70000003'), u'a': u'aa', u'b': u'bb'}]

    find格式
    find([spec=None[, fields=None[, skip=0[, limit=0[, timeout=True[, snapshot=False[, tailable=False[, sort=None[, max_scan=None[, as_class=None[, **kwargs]]]]]]]]]]])

    代码
    In [120]: db.posts.count()//当前集合文档数
    Out[
    120]: 3
    In [
    121]: type(db.posts)
    Out[
    121]: <class'pymongo.collection.Collection'>

    In [
    138]: posts.rename('test_abeen')//重命名当前集合
    In [
    139]: db.collection_names()
    Out[
    139]:
    [u
    'system.indexes',
    u
    'fs.files',
    u
    'fs.chunks',
    u
    'test_gao',
    u
    'system.users',
    u
    'test_abeen']

    In [
    151]: for post in c.find({"a":"aa"}).sort("a"): //查询并排序列
    post
    Out[
    152]: {u'_id': ObjectId('4c358ad4421aa91e70000002'), u'a': u'aa', u'b': u'bb'}
    Out[
    152]: {u'_id': ObjectId('4c358ad9421aa91e70000003'), u'a': u'aa', u'b': u'bb'}
     1 > db.foo.insert( { x : 1, y : 1 } )
    2 > db.foo.insert( { x : 2, y : "string" } )
    3 > db.foo.insert( { x : 3, y : null } )
    4 > db.foo.insert( { x : 4 } )
    5
    6 // Query #1 y 为null或不存在
    7 > db.foo.find( { "y" : null } )
    8 { "_id" : ObjectId("4dc1975312c677fc83b5629f"), "x" : 3, "y" : null }
    9 { "_id" : ObjectId("4dc1975a12c677fc83b562a0"), "x" : 4 }
    10
    11 // Query #2 y为null的值
    12 > db.foo.find( { "y" : { $type : 10 } } )
    13 { "_id" : ObjectId("4dc1975312c677fc83b5629f"), "x" : 3, "y" : null }
    14
    15 // Query #3 y不存在的结果
    16 > db.foo.find( { "y" : { $exists : false } } )
    17 { "_id" : ObjectId("4dc1975a12c677fc83b562a0"), "x" : 4 }

    -----------------------------------------------------------------------------

    更多相关信息
    http://api.mongodb.org/python/1.7%2B/api/pymongo/database.html
    http://api.mongodb.org/python/1.7%2B/api/pymongo/collection.html

    http://api.mongodb.org/python/1.7%2B/api/index.html

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
    Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
    Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
    Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
    Java实现 蓝桥杯VIP 算法提高 士兵排队问题
    Java实现 蓝桥杯VIP 算法提高 士兵排队问题
    Java实现 蓝桥杯VIP 算法提高 士兵排队问题
    Java实现 蓝桥杯VIP 算法提高 士兵排队问题
    Java实现 蓝桥杯VIP 算法提高 数字黑洞
    Minifilter微过滤框架:框架介绍以及驱动层和应用层的通讯
  • 原文地址:https://www.cnblogs.com/abeen/p/1773905.html
Copyright © 2011-2022 走看看