python 如何去掉数组中的0元素_python-mongodb-更新优化-更新(update)数组(列表)中的元素...

025455c65df9eafe20a356dd372c70a8.png

背景

工作中遇到的大概可以份三种情况,

  1. 更新数组中的某个值或数组字典中的某个值,
  2. 向数组中增加单个元素,
  3. 向数组中删除某个特定的元素,
# 第一种情况 更新数组中的某个值
# 初始化数据
ret = test_coll.insert_many([
    {"_id": 1, "grades": [85, 80, 80]},
    {"_id": 2, "grades": [88, 90, 92]},
    {"_id": 3, "grades": [85, 100, 90]}
],
)

test_coll.update_one({'grades': 85}, {'$set': {"grades.$": 82}})
# 只会更新匹配的数组中的第一个
# 更新的文档变成 {"_id": 1, "grades": [82, 80, 80]},



# 当数组中嵌套的为字典时:
ret = test_coll.insert_many([
    {
        '_id': 4,
        'grades': [
            {'grade': 80, 'mean': 75, 'std': 8},
            {'grade': 85, 'mean': 90, 'std': 5},
            {'grade': 85, 'mean': 85, 'std': 8}
        ]
    }
],
)

test_coll.update_one({'grades.grade': 85}, {'$set': {"grades.$.std": 18}})
# 其中匹配的第一个更细为 {'grade': 85, 'mean': 90, 'std': 18},
# 注意查询条件中需要数组中嵌套的字段


# 第二种情况
#向数组中嵌套的字典增加单个元素,使用$addToSet
test_coll.update_one({'_id': 1}, {'$addToSet': {'grades': 50}})
#结果:{"_id": 1, "grades": [82, 80, 80,50]}
#如果添加的元素是列表,则会当成一个元素添加
# 如果需要把列表中的元素分散添加 则可以用each
test_coll.update_one({'_id': 2}, {'$addToSet': {'grades': {'$each': [90,30, 40]}}})



#第三种情况使用pull,想当初查询出来后一个个做比较然后再删除,再更新,相比而言pull在查找时就删除更新,
#效率高了很多
https://docs.mongodb.com/manual/reference/operator/update/pull/

总结

当不熟悉或者没有查到对应的清晰资料时,可以以完成任务为首要原则,同时心里要记下这里是否可以优化,多看官方文档,找到较佳方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值