pymongodb 更新数据多个嵌套数组更新 需要使用arrayFilters

        新手使用django操作mongodb 数据库遇到嵌套多层的数组元素 。

        $ 位置操作符只能使用一次,多次嵌套需要使用arrayFilters 。

写出mongodb sql可以执行但是  python代码中总是以下几个错误报错来来回回:

1、Too many positional (i.e. '$') elements found in path '

2、array_filters must be a list

3、got multiple values for argument 'upsert'

4、upsert must be True or False

sql如下:

db.po.updateMany({"orderItems.waybills.platorder":"2072881765951620035"},
{"$set":{"orderItems.$.waybills.$[idx2].expressId":"YT5763695957631"}},
{ "arrayFilters": [{ "idx2.platorder": "2072881765951620035" }]},{"upsert":true})

我的代码(错误的!!)

 db.po.update({'orderItems.waybills.platorder': '2072881765951620035'},
                 {'$set': {'orderItems.$.waybills.$[idx1].expressId': 'YT5763695957631'}},
                 {'arrayFilters': [{'idx1.platorder': '2072881765951620035'}], "multi": True})

最后查看pymongodb 源代码发现sql中的"arrayFilters:"要替换成"array_filters=",如下:

def update_many(self, filter, update, upsert=False, array_filters=None,
                    bypass_document_validation=False, collation=None,
                    hint=None, session=None):

 更改如下:

db.po.update_many({"orderItems.waybills.platorder": "2072881765951620035"},
                            {"$set": {"orderItems.$.waybills.$[idx2].expressId": "YT5763695957631"}},
                            upsert=False,
                            array_filters=[{"idx2.platorder": "2072881765951620035"}])

头大一下午,不是多高深,记下来备忘使用。。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值