【问题标题】:projection not working with find query投影不适用于查找查询
【发布时间】:2019-04-14 01:57:20
【问题描述】:

您好,我想通过查询排除一些字段。我正在使用 nodejs

public async getDoc() {
        return new Promise((resolve, reject) => {
            this.database.collection('users').find({email: "value3"}, {password: 0}).toArray((err, result) => {
                if(err) {
                    reject(err)
                }
                resolve(result);
            });
        })
    }

但在结果集中我不断收到密码字段..

【问题讨论】:

标签: node.js mongodb


【解决方案1】:

Projection 不适用于新的 nodejs mongodb 驱动程序...相反,您必须在此处使用 .project() 光标方法

this.database.collection('users')
  .find({ "email": "value3" })
  .project({ "password": 0 })
  .toArray();

【讨论】:

  • 项目是正确的使用方式。但是,投影选项不起作用是不正确的。这只是因为作者的代码没有为这些选项传递正确的参数。
  • query failed: Unsupported projection option: projection: { password: 1.0 }请测试后再评论
  • 请检查您的 mongodb 版本。投影仅在版本 > 3 上可用。如果您的 mongodb 版本 fields。
【解决方案2】:

使用 fields 对象作为 find 方法中的第二个参数,该对象中的所有字段都需要排除密码。

这样做:

find({email: "value3"}, {fields: {all_other_fields...: 1}})

您也可以尝试 {fields: {password: 0}},但我自己没有尝试过,所以我不确定它是否会起作用。

【讨论】:

  • 对于版本 >3。 fields 已弃用。你应该改为projection
猜你喜欢
  • 1970-01-01
  • 2018-12-16
  • 2012-12-28
  • 1970-01-01
  • 2019-01-17
  • 2012-08-12
  • 1970-01-01
  • 2020-09-24
相关资源
最近更新 更多