【问题标题】:pymongo "Projection" to exclude all fields and only get selected fields?pymongo \"Projection\" 排除所有字段并只获取选定的字段?
【发布时间】:2022-12-10 01:25:41
【问题描述】:

使用 mongodb 投影,我们可以定义要包含的文件和排除的文件。

像这样 :

data = db.Users.find_one({'username': user },{"_id":0,"password":0,"email":1}) 

此查询将排除 _idpassword 字段,仅包括 email

但是有没有办法排除文档中存在的所有字段,只获取 emailphone,

在较小的文档中,我可以将不需要的项目的项目值设置为 0,但对于较大的文档,有没有办法自动排除所有其他字段/项目并只获取所需的字段/项目?

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    您实际提供的具体命令/语法是不是有效的:

    > db.Users.findOne({'username': 'user' },{"_id":0,"password":0,"email":1})
    MongoServerError: Cannot do inclusion on field email in exclusion projection
    

    您可以在this playground example 中看到同样的失败。

    不过默认情况下,投影会完全按照您的意愿进行。来自documentation

    仅返回指定字段和 _id 字段通过在投影文档中将 <field> 设置为 1,投影可以显式包含多个字段。

    因此,如果您删除投影的(无效的)"phone":0 组件并按如下方式执行命令:

    data = db.Users.find_one({'username': user },{"_id":0,"email":1}) 
    

    它会像你想要的那样表现。演示在this playground example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 2014-06-23
      • 2020-12-23
      • 1970-01-01
      • 2017-12-11
      相关资源
      最近更新 更多