MongoDB学习笔记--和python3交互

#!/usr/bin/env python
# coding=utf-8
# 链接MongoDB
import pymongo

# 连接数据库服务器,获取客户端对象
client = pymongo.MongoClient("localhost",27017)
# 获取数据库对象py3
db = client.py3
# db = client['py3']
# 获得集合对象stu
stu = db.stu
# stu = db['stu']

# 查看所有数据库
dblist = client.list_database_names()
print(dblist)
# 查看当前数据库下所有的集合
collection_list = db.list_collection_names()
print(collection_list)

# 添加文档
s1 = {'name':'pymongo','age':18}
s1_id = stu.insert(s1)
print(s1_id)
# s2 = {'name':'alice','age':20,'gender':0}
# s2_id = stu.insert_one(s2).inserted_id
# print(s2_id)
# 查询文档
cursor = stu.find()
# 获取文档的个数,两种方法
print(cursor.count())
print(stu.count())
for item in cursor:
    print(item)
# 修改文档
stu.update({'name':'pymongo'},{'$set':{'name':'pymongo2'}})
print("*"*30)
for item in stu.find():
    print(item)
print("*"*30)
# 删除文档
stu.remove({'name':'pymongo2'},{'justOne':True})
for item in stu.find():
    print(item)
print("-"*20)
# 查询年龄大于等于18的学生
for item in stu.find({'age':{'$gte':18}}):
    print(item)
print("-"*20)
# 查询年龄大于等于18并且gender为1的学生
for item in stu.find({'age':{'$gte':18},'gender':1}):
    print(item)
print("-"*20)
# 查询年龄大于18,或者性别为0的学生
for item in stu.find({'$or':[{'age':{'$gte':18}},{'gender':0}]}):
    print(item)
print("-"*20)
# 查询年龄为18-20之间的学生,包含20
for item in stu.find({'age':{'$in':[18,20]}}):
    print(item)
print("-"*20)
# 查询姓小的学生
for item in stu.find({'name':{'$regex':'^小'}}):
    print(item)
print("-"*20)
# 读取指定数量的文档
for item in stu.find().limit(3):
    print(item)
print("-"*20)
# 获取第三个、第四个数据
for item in stu.find().limit(2).skip(2):
    print(item)
# 统计男生、女生的人数(counter可以换成其他名字)
print("-"*20)
agg = stu.aggregate([
    {
        '$group':{
            '_id':'$gender',
            'counter':{'$sum':1}}
    }
])
for item in agg:
    print(item)
print("-"*20)
# 求总人数、平均年龄
agg2 = stu.aggregate([
    {
        '$group':{
            '_id':'null',
            '总人数':{'$sum':1},
            '平均年龄':{'$avg':'$age'}}
    }
])
for item in agg2:
    print(item)
print("-"*20)
# 统计学生性别和姓名
agg3  = stu.aggregate([
    {
        '$group':{
            '_id':'$gender',
            'name':{'$push':'$name'}
        }
    }
])
for item in agg3:
    print(item)
print("-"*20)
# 使用$$ROOT可以将文档内容加入到结果集的数组中
agg4 = stu.aggregate([
    {
        '$group':{
            '_id':'$gender',
            '姓名':{'$push':'$$ROOT'}
        }
    }
])
for item in agg4:
    print(item)
print("-"*20)
# 查询年龄大于等于18的男生、女生人数及姓名
agg5 = stu.aggregate([
    {'$match':{'age':{'$gte':18}}},
    {'$group':
         {
             '_id':'$gender',
             '总人数':{'$sum':1},
             '姓名':{'$push':'$name'}
         }
    }
])
for item in agg5:
    print(item)
print("-"*20)
# 查询学生的姓名、年龄:
# 方法一
agg6 = stu.find({},{'_id':0,'name':1,'age':1})
for item in agg6:
    print(item)
print("-"*20)
# 方法二
agg7 = stu.aggregate([
    {'$project':
        {
            '_id':0,
            'name':1,
            'age':1
        }
    }
])
for item in agg7:
    print(item)
print("-" * 20)
# 查询男生、女生人数,输出人数及具体姓名
agg8 = stu.aggregate([
    {'$group':{
        '_id':'$gender',
        'counter':{'$sum':1},
        'name':{'$push':'$name'}}},
    {'$project':{
        '_id':0,
        'counter':1,
        'name':1}
    }
])
for item in agg8:
    print(item)
print("-" * 20)
# 查询男生、女生人数,按人数降序
agg9 = stu.aggregate([
    {'$group':{
        '_id':'$gender',
        'counter':{'$sum':1}}},
    {'$sort':{'counter':-1}}
])
for item in agg9:
    print(item)
print("-" * 20)
# 统计男生、女生人数及姓名,按人数升序,取第二条数据
agg10 = stu.aggregate([
    {'$group':{'_id':'$gender',
               'name':{'$push':'$name'},
               'counter':{'$sum':1}}},
    {'$sort':{'counter':1}},
    {'$skip':1},
    {'$limit':1}
])
for item in agg10:
    print(item)
print("-" * 20)
t4 = db.t4
t4.insert({'_id':1,'item':'t-shirt','size':['S','M','L']})
# 对某字段值进行拆分
agg11 = t4.aggregate([
    {
        '$unwind':'$size'
    }
])
for item in agg11:
    print(item)
print("-" * 20)
# 删除集合t4里面的文档
t4.remove({})
# 删除集合t4
t4.drop()
t5 = db.t5
t5.insert([
    {'_id':1,'item':'a','size':['S','M','L']},
    {'_id':2,'item':'b','size':[]},
    {'_id':3,'item':'c','size':'M'},
    {'_id':4,'item':'d'},
    {'_id':5,'item':'e','size':'null'}
])
# 使用语法1查询,数据丢失
agg12 = t5.aggregate([
    {'$unwind':'$size'}
])
for item in agg12:
    print(item)
print("*"*20)
# 使用语法2查询
agg13 = t5.aggregate([
    {'$unwind':
        {
        'path':'$size','preserveNullAndEmptyArrays':True
        }

    }
])
for item in agg13:
    print(item)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值