如何动态查询mongoDB文档

时间:2018-05-25 13:58:47

标签: python mongodb-query pymongo

我对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会抱怨位置操作员没有找到查询所需的匹配。

有没有什么方法可以放置一个意味着任何价值的占位符?或者如果不存在,是否会有一种解决方法来实现这一目标?谢谢!

1 个答案:

答案 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} })