【问题标题】:How to return a specific fields using Pymongo and MongoDB?如何使用 Pymongo 和 MongoDB 返回特定字段?
【发布时间】:2020-08-21 16:48:38
【问题描述】:

我试图从我的 MongoDB 数据库中返回两个字段,并且此查询正确地从客户端发回我的用户名和帖子:

db.users.find({'email_address': /^johnny/}, {'username': 1, 'user_posts': 1, '_id': 0});

我正在尝试将其切换到 PyMongo,以便我可以在 Python 中查询,我的查询如下所示:

regx = Regex('^{0}'.format('johnny'))
query = {'postcode': regx}, {'username': 1, 'user_posts': 1, '_id': 0}
user_list = mycol.find(query).limit(5)

失败的地方在这里:

{'username': 1, 'user_posts': 1, '_id': 0}

由于没有此过滤器,文档将被完整发送。有了这个,我从 PyMongo 收到了这个错误消息:

TypeError: filter must be an instance of dict, bson.son.SON, or any other type that inherits from collections.Mapping

我认为我的过滤器格式不正确,它不再是字典,因此尝试了各种用引号括起来的替代方法,然后是 .format() 等,但似乎无法达到神奇的组合。

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    问题在于以下不是字典,而是两个字典的元组:

    query = {'postcode': regx}, {'username': 1, 'user_posts': 1, '_id': 0}
    

    如果你想直接使用它,你可以这样做

    user_list = mycol.find(query[0], query[1]).limit(5)
    

    但最好将它实际分配给两个单独的变量,像这样

    query, filter = {'postcode': regx}, {'username': 1, 'user_posts': 1, '_id': 0}
    

    然后

    user_list = mycol.find(query, filter).limit(5)
    

    【讨论】:

      【解决方案2】:

      原来这很容易。我只需要两本字典。 1 用于查询,另一个用于过滤器。

      regx = Regex('^{0}'.format('johnny'))
      filter_stuff = {'username': 1, 'user_posts': 1, '_id': 0}
      

      然后构建完整的查询如下:

      user_list = mycol.find(query, filter_stuff).limit(5)
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多