zoukankan      html  css  js  c++  java
  • python操作mongodb

    出于对mysql的天然不信任(不了解),准备尝试些新东东,redis是内存数据库有些了解,这回试试更有存储感觉的mongodb

    from pymongo import Connection

    con = Connection()

    connection = pymongo.Connection('localhost', 27017)

    db = con.test # 数据库名为test

    posts = db.post

    2     >>> post1 = {"title":"I Love Python",
     3          "slug":"i-love-python",
     4          "author":"SErHo",
     5          "content":"I Love Python....",
     6          "tags":["Love","Python"],
     7          "time":datetime.datetime.now()}

    一条记录就是一个 {} dic, 内有各种key, 对应value可以是函数值

    posts.insert(post1)

    把记录存入数据库

    post = posts.find ()

    查找所有记录

    post.count()

    得到所有记录数

    posts.find_one({"slug":"python-mongodb"})

    查找一条记录

    posts.update({"_id":post["_id"]},post)

    更新一条记录 post

    1     >>> posts.update({"_id":post["_id"]},{"$set":{"content":"Test Update SET...."}})

    用 $set 更新一条记录里的一个key-value对中的value

    >>> posts.update({"_id":post["_id"]},{"$inc":  {"views":1}})

    $inc 给 记录中的views对应值加1, 如果没有views这个key 就创建,并赋值 1?

    >>> posts.update({"_id":post["_id"]},{"$push":{"tags":"Test"}})

    给数组类型的值append一个值

    2     >>> posts.update({"_id":post["_id"]},{"$addToSet":{"tags":{"$each":["Python","Each"]}}})

    给数组类型的值append一系列值,同时确保不会有重复值

    1        >>> posts.update({"_id":post["_id"]},{"$pop":{"tags":1}})

    将数组类型的值pop出末尾的一个值,如果是{"$pop":{"tags":-1}} 则pop出第一个

    可以使用”$pull”来删除数组中指定的值,它会删除数组中所有匹配的值。如何修改其中的一个值呢?可以先删除掉,再增加一个进去,还有就是直接 定位修改。比如tags数组中,”Python”是第一个,想把它改成”python”,可以通过下标直接选择,就是tags[0],然后使用上面 的”$set”等修改器,如果不确定可以使用$来定位:

    1     >>> posts.update({"tags":"MongoDB"},{"$set":{"tags.$":"Hello"}})

    这个将先搜索tags中满足”MongoDB”的,如果找到,就把它修改为”Hello”。可以看到上面的update这个函数已经有两个参数了, 它还有第3个参数upsert,如果设为”True”,则如果没有找到匹配的文档,就会在匹配的基础上新建一个文档,具体实例就不讲了。

    批量插入

    new_posts = [{"name":"a.payment.FakeInst.a", "family":"FakeInst", "category":"恶意扣费", "behavior":"后台发送扣费短信"}, {"name":"a.payment.Umeng.a", "family":"Umeng", "category":"恶意扣费", "behavior":"1. 后台从服务器端获取指令, 自动发送短信,订制扣费服务,并拦截指定号码短信。 2. 后台从服务器端获取指令,自动模拟访问广告,消耗用户流量"}]

    malinfo.insert(new_posts)


    Out[13]: [ObjectId('527281323387e31671aa91b2'), ObjectId('527281323387e31671aa91b3')]

    创建索引

    1
    2
    3
    >>> from pymongo import ASCENDING, DESCENDING
    >>> posts.create_index([("date", DESCENDING), ("author", ASCENDING)])
    u'date_-1_author_1'
  • 相关阅读:
    关闭编辑easyui datagrid table
    sql 保留两位小数+四舍五入
    easyui DataGrid 工具类之 util js
    easyui DataGrid 工具类之 后台生成列
    easyui DataGrid 工具类之 WorkbookUtil class
    easyui DataGrid 工具类之 TableUtil class
    easyui DataGrid 工具类之 Utils class
    easyui DataGrid 工具类之 列属性class
    oracle 卸载
    “云时代架构”经典文章阅读感想七
  • 原文地址:https://www.cnblogs.com/yeyong/p/3987962.html
Copyright © 2011-2022 走看看