如何使用猫鼬findOne
我有以下模式(很抱歉它在coffeescript中)
Schema = mongoose.Schema
AuthS = new Schema
auth: {type: String, unique: true}
nick: String
time: Date
Auth = mongoose.model 'Auth', AuthS
我只是想恢复肯定在我的数据库中的一条记录:
Auth.findOne({nick: 'noname'}, function(obj) { console.log(obj); });
不幸的是,这总是记录null
。 mongo shell 中的 db.auths.findOne({nick: 'noname'})
始终返回一个值。到底是怎么回事?
I have the below schema (apologies that it is in coffeescript)
Schema = mongoose.Schema
AuthS = new Schema
auth: {type: String, unique: true}
nick: String
time: Date
Auth = mongoose.model 'Auth', AuthS
I simply want to recover one record which is definitely in my database:
Auth.findOne({nick: 'noname'}, function(obj) { console.log(obj); });
Unfortunately this always logs null
. db.auths.findOne({nick: 'noname'})
in mongo shell always returns a value. What is going on?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
发现问题,需要使用
function(err,obj)
代替:Found the problem, need to use
function(err,obj)
instead:Mongoose 基本上包装了 mongodb 的 api,为您提供伪关系数据库 api,因此查询不会与 mongodb 查询完全相同。 Mongoose findOne 查询返回一个查询对象,不是文档。您可以按照解决方案的建议使用回调,或者从 v4+ 开始 findOne 返回一个 thenable,以便您可以使用 .then 或 wait/async 来检索文档。
如果您想使用第三方 Promise 库,请参阅 文档。
Mongoose basically wraps mongodb's api to give you a pseudo relational db api so queries are not going to be exactly like mongodb queries. Mongoose findOne query returns a query object, not a document. You can either use a callback as the solution suggests or as of v4+ findOne returns a thenable so you can use .then or await/async to retrieve the document.
See the docs if you would like to use a third party promise library.
在我的情况下,存在同样的错误,我正在使用 Asyanc/Await 函数,因为这需要为
上面的 findOne 添加 AWAIT,foundUser 在两种情况下都始终包含对象值,无论用户是否找到,因为它在完成 findOne 之前返回值。
上面,如果用户不存在于提供条件的集合中,foundUser 将返回 null。如果用户找到,则返回用户文档。
In my case same error is there , I am using Asyanc / Await functions , for this needs to add AWAIT for findOne
above , foundUser always contains Object value in both cases either user found or not because it's returning values before finishing findOne .
above , foundUser returns null if user is not there in collection with provided condition . If user found returns user document.
您可能需要考虑将
console.log
与内置“arguments”对象一起使用:这将始终输出所有参数,无论您有多少个参数。
You might want to consider using
console.log
with the built-in "arguments" object:This will always output all of your arguments, no matter how many arguments you have.
我想给出 2023 年的更新答案。使用列出的方法,我无法让它工作并收到错误:
我让它工作的方式是使用承诺。
I wanted to give an updated answer for 2023. Using the listed methods I was unable to get it to work and got the error:
The way I got it to work is using promises.
使用 obj[0].nick 你会得到想要的结果,
Use obj[0].nick and you will get desired result,