浅析mongodb(基于python,linux)

将数据导入本地mongo中
mongoimport --db test --collection restaurants --drop --file primer-dataset.json
如果本地mongo数据库中已经有了test 数据库,上面的命令会先删除之前的数据然后再导入新的数据
在Linux/OS X 安装pymongo
pip install pymongo

插入数据:

# test.py
from pymongo import MongoClient
client = MongoClient() # 如果不指明则默认连接本地的27017端口
db = client.test # db 代表了mongo的test数据库
table = db.person # 如果test中没有person这个表,MongoDB会创建一个Person

#mongo中存储的数据类似json对象
from datetime import datetime
data = {
"name": "Jack",
"sex": "男",
"Age": 20,
"birth": datetime.strptime("1995-12-23", "%Y-%m-%d"),
"hobby": ["football", "basketball"],
"grades":{
"grade": "A"
"score": 80
}
"detail": [
{"father": "xxxx", "mather": "ffffff"}
{"father": "country", "mather": "God"}
]
}
p1 = table.insert_one(data)
#mongodb 会自动默认添加一个_id的域
print people.inserted_id
# 插入多条数据可以使用insert_many,insert_many 有默认参数ordered=True
p2 = table.insert_many({"name": i} for i in range(3))
print p2.inserted_ids

查询数据:
person = table.find() #查找person表的所有信息
person = table.find({"Age":20}) #查询年龄是20的person
person = table.find({"Age":20, "detail.father": "country"}) #查询年龄是20并且father是country的person
person = table.find({"grades.score": {"$gt": 70}}) #查询分数大于70的person
person = table.find({"$or": [{"sex": "女"}, {"grades.grade": "A"}]}) #查询性别为女或者成绩为A
person = table.find().sort( [ ("Age", pymongo.ASCENDING), ("grades.score", pymongo.DESCENDING) ] ) #查询person表所有记录并先按照年龄升序,然后按分数降序

select = {"birth": {"$lt": datetime.now()}}
group = {"_id": "$grades.grade", "count": {"$sum": 1}}
match = dict(select, **{"hobby": "football"})
pipeline = [
{"$match": match}, # 匹配条件
{"$unwind": "$grades"} #要以grades中的grade为分组条件要首先把grades查询解析出来
{"$group": group}, #分组条件
{"$limit": 10} # 限制查询条数为10
]
person = table.aggregate(pipeline)

当表的名字不固定是个变量的时候,获取table通过
table = db["person_%s" % variable] 这种方式

posted @ 2015-10-22 18:02  lixiaodi  阅读(358)  评论(0编辑  收藏  举报