查询时投影不起作用

6

你好,我想通过查询排除一些字段。我正在使用Node.js。

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);
            });
        })
    }

但是在结果集中我一直得到密码字段...

使用投影文档 https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/ - Joshua Benz
2个回答

13

使用新的nodejs mongodb驱动程序时,投影不起作用...相反,您必须在此处使用.project()游标方法,详见文档

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

项目是正确的使用方式。但是投影选项不起作用并不是真的。这只是因为作者的代码没有传递正确的选项参数。 - Dat Tran
查询失败:不支持的投影选项:projection: { password: 1.0 }。请先进行测试,然后发表评论。 - Ashh
请检查您的MongoDB版本。Projection仅适用于版本> 3。如果您的MongoDB版本< 3,请改用“fields”。 - Dat Tran

1

在find方法的第二个参数中使用fields对象,将想要获取的所有字段都列在该对象中,不包括密码。

操作步骤如下:

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

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

1
对于版本大于3的情况,fields已被弃用。您应该使用projection代替。 - Dat Tran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接