gpt4 book ai didi

node.js - Mongo NodeJS project() 不是一个函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:42 25 4
gpt4 key购买 nike

我想从结果中排除一些属性。我阅读了规范:https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/ - 我需要使用project功能。所以我链接了这个调用,但代码开始失败。代码在没有 .project({ auth: 0, prefs: 0, opportunity: 0 }) 的情况下运行良好。问题出在哪里?我发现这个答案看起来很相似:https://stackoverflow.com/a/51732851/1639556 .

package.json

"mongodb": "^3.4.1",

lambda

exports.handler = (payload, context, callback) => {
const userId = payload.pathParameters.userId;
context.callbackWaitsForEmptyEventLoop = false;
mongo.connectToDatabase()
.then(db => {
return findUser(db, userId);
})
.then(user => {
console.log("User fetched");
})
};

function findUser(dbClient, userId) {
return dbClient.db()
.collection("users")
.findOne({ "_id": userId })
.project({ auth: 0, prefs: 0, consent: 0 })
.then(doc => { return doc; });
}

错误

2020-01-28T11:52:34.555Z        0701f485-3770-1f43-f838-4baec8377293    INFO    Request failed TypeError: dbClient.db(...).collection(...).findOne(...).project is not a function
at findUser (/var/task/src/handlers/users/getUser.js:41:10)
at mongo.connectToDatabase.then.db (/var/task/src/handlers/users/getUser.js:19:20)

PS 我很好奇投影是在客户端还是服务器端完成。让我感到困惑的是 project 函数是在 find 调用之后。

最佳答案

.project() 是一个游标函数,因此虽然您可以在游标方法上使用它,但 findOne 不会返回游标。您可以做的就是使用project作为查询选项。

在您链接的文档中,有一个如何在以下情况下使用它的示例:

db.inventory.find( { status: "A" }, { item: 1, status: 1, instock: { $slice: -1 } } )

投影选项为{ item: 1, status: 1, instock: { $slice: -1 } }

因此,在您的情况下,您需要将代码更改为:

return dbClient.db()
.collection("users")
.findOne({ "_id": userId }, { auth: 0, prefs: 0, consent: 0 })
.then(doc => { return doc; });

或者如果您使用 3+ 版本的 Mongod Nodejs 驱动程序更改为:

return dbClient.db()
.collection("users")
.findOne({ "_id": userId }, {projection: { auth: 0, prefs: 0, consent: 0 }})
.then(doc => { return doc; });

关于node.js - Mongo NodeJS project() 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60136483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com