【发布时间】:2018-07-17 15:58:15
【问题描述】:
考虑这样的对象:
{
"_id" : ObjectId("5b4dbf3541e5ae6de394cc99"),
"active" : true,
"email" : "admin@something.eu",
"password" : "$2b$12$5qqD3ZulKI7S6j.Wx513POpCNWRMppE.vY4.3EIZedm109VUPqXoi",
"badges" : {
"cnc" : {
"lvl" : "0"
},
"laser" : {
"lvl" : "0"
},
"impression3d" : {
"lvl" : "0"
},
"maker" : {
"lvl" : "0"
},
"electronique" : {
"lvl" : "0"
},
"badge" : {
"lvl" : 1
}
},
"roles" : [
ObjectId("5b4dbf3541e5ae6de394cc97")
]
}
我需要将 lvl 值更改为 0 到 5 之间的任何值,不一定是不规则增量。为此,父对象名称由变量传递,因此我正在尝试为要更改的徽章 lvl 构建动态查询。
目前我的 Flask 路线的结尾是这样的:
badge = quiz['badge']
C_user = current_user.get_id()
update = bdd.user.update({"_id": C_user, "badges": { '$elemMatch': {badges : badge}}}, {"$set": { "badges.$.lvl": 3 }}, upsert = True)
但是对于这种查询,我收到一条错误消息:
pymongo.errors.WriteError: The positional operator did not find the match needed from the query.
我是否完全错误地认为我需要使用 $elemMatch 运算符?有没有办法动态定位不同的徽章以增加内部 lvl?
谢谢!
注意:我第一次尝试使用 MongoEngine,但似乎无法深入研究。
【问题讨论】: