MongoDB 更新collection内部array顺序

import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["test"]
col = db['test']
col.drop()

docs=[
    {'name':{'first':'wang','last':'ming'},'age':15,'score':[{'chi':60,'eng':70,'num':1},{'chi':80,'eng':65,'num':2}],'reward':[3,2,4]},
    {'name':{'first':'wei','last':'hong'},'age':17,'score':[{'chi':66,'eng':90,'num':1},{'chi':40,'eng':55,'num':2}],'reward':[1,6,4]},
    {'name':{'first':'li','last':'ben'},'age':14,'score':[{'chi':50,'eng':78,'num':1},{'chi':50,'eng':45,'num':2}],'reward':[5,2,4]},
]

col.insert_many(docs)

# 获取col,并对内部的列表排序
# 方法1:先更新,再获取
col.update_one({'age':15},{'$push': {'reward': {'$each': [],'$sort':-1}}})
col.find_one({'name.first':'wang'},{'name':1,'_id':0})

# 方法2:方法1的综合
col.find_one_and_update({'age':15},{'$push': {'reward': {'$each': [],'$sort':1}}},return_document=True)

# 方法3:使用聚合函数
res = col.aggregate([
    {'$match' : { "age" : 15 }},
    {'$unwind' : "$reward"},
    {'$sort': { "TestArr" : 1 }},
    {'$group':{'_id' : "$age",'reward' : {'$push':"$reward"}}}
])

list(res)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值