出于对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":
2 {"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":
3 {"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‘)]