如何在python dicts上使用$ push/$ addToSet mongodb更新修饰符

aun*_*uny 3 python mongodb

Mongodb更新提供了$push附加到数组的修饰符.我的问题是我希望这发生在一个字典上,例如

如果我的记录最初看起来像这样:

{"collaborations":{'id1':{'role':'dev','scope':'dev'}}}
Run Code Online (Sandbox Code Playgroud)

我想在"协作"字段dict中添加另一个项目(下面的"id2"),看起来像这样:

{"collaborations":{'id1':{'role':'dev','scope':'dev'},'id2':{'role':'qa','scope':'qa'}}}
Run Code Online (Sandbox Code Playgroud)

我正在尝试$push:

my_record.update({match_criteria},{$push,{"collaborations":{'id2':{'role':'qa','scope':'qa'}}}})
Run Code Online (Sandbox Code Playgroud)

还有$addToSet:

my_record.update({match_criteria},{$,{"collaborations":{'id2':{'role':'qa','scope':'qa'}}}})
Run Code Online (Sandbox Code Playgroud)

使用这两个,mongodb抛出错误"无法应用$addToSet($push)修饰符到非数组".

如何为dict类型做到这一点?有任何想法吗?

Ros*_*nko 6

问题是,$addToSet$push改性剂使用数组.

要更新子文档(这是您需要的),只需使用$set带点符号的修饰符来访问子文档(field.subfield):

my_record.update({
    match_criteria
}, {
    '$set': {
        'collaborators.id2': {
            // new document fields here
        }
    }
})
Run Code Online (Sandbox Code Playgroud)