我对MongoDB很陌生,我不确定我的问题是否正确,但这里有详细信息:
我使用的是PyMongo,我有一个这样的文档:
{'_id': 1,
'user_ratings': [
{'Bob': 3},
{'Jane': 4}
]
}
我的初步操作是将'Bob'
设置为一个新的数字,比如说5.正确的方法就是:
db.ratings.update_one({'_id': 1, 'user_ratings.Bob': 3}, {'$set': {"user_ratings.$.Bob": 5} })
这可以按预期工作,但在上述查询中,我想这样做,以致user_ratings.Bob
设置为什么并不重要。如果我省略这个匹配,PyMongo会抱怨位置操作员没有找到查询所需的匹配。
有没有什么方法可以放置一个意味着任何价值的占位符?或者如果不存在,是否会有一种解决方法来实现这一目标?谢谢!
答案 0 :(得分:2)
您应该将对象的schma更改为以下内容:
{'_id': 1,
'user_ratings': [
{'user': 'Bob', 'rating': 3},
{'user': 'Jane': 'rating': 4}
]
}
现在你可以像这样查询:
db.ratings.update_one(
{'_id': 1, 'user_ratings.user': 'Bob'},
{'$set': {'user_ratings.$.rating': 5} })