【问题标题】: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})
此查询将排除 _id 和 password 字段,仅包括 email ,
但是有没有办法排除文档中存在的所有字段,只获取 email 和 phone,
在较小的文档中,我可以将不需要的项目的项目值设置为 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。