gpt4 book ai didi

node.js - Model.find().toArray() 声称没有 .toArray() 方法

转载 作者:IT老高 更新时间:2023-10-28 23:26:08 26 4
gpt4 key购买 nike

我对 Node.js 和 MongoDB 非常陌生,正在尝试拼凑我自己的博客应用程序。我在尝试通过我的“博客”模型查询具有特定用户名的模型时遇到问题。当我尝试运行时:

var userBlogs = function(username) {
ub = Blog.find({author: username}).toArray();
ub = ub.reverse();
};

我收到一个错误:

TypeError: Object #<Query> has no method 'toArray'

我知道全局变量很糟糕,但我一直在努力让它发挥作用。 Mongo 文档声称返回的游标可以调用 toArray() 方法。我不知道为什么它不起作用。

这是我的架构/模型创建:

var blogSchema = mongoose.Schema({
title: {type:String, required: true},
author: String,
content: {type:String, required: true},
timestamp: String
});
var Blog = mongoose.model('Blog', blogSchema);

这里是/login 和/readblog 请求

app.get('/readblog', ensureAuthenticated, function(req, res) {
res.render('readblog', {user: req.user, blogs: ub})
})

app.get('/login', function(req, res){
res.render('login', { user: req.user, message: req.session.messages });
});

app.post('/login',
passport.authenticate('local', { failureRedirect: '/login'}),
function(req, res) {
userBlogs(req.user.username);
res.redirect('/');
});
});

最终的结果应该是和这个 Jade 一起工作的:

extends layout

block content
if blogs
for blog in blogs
h2= blog[title]
h4= blog[author]
p= blog[content]
h4= blog[timestamp]
a(href="/writeblog") Write a new blog

如何让查询输出数组,甚至作为对象工作?

最佳答案

toArray 函数存在于 Native MongoDB NodeJS 驱动程序 (reference) 的 Cursor 类中。 MongooseJS 中的 find 方法返回一个 Query 对象( reference )。有几种方法可以进行搜索并返回结果。

由于 MongoDB 的 NodeJS 驱动程序中没有同步调用,因此在所有情况下都需要使用异步模式。 MongoDB 的示例(通常在 JavaScript 中使用 MongoDB 控制台)意味着 native 驱动程序也支持类似的功能,但它不支持。

var userBlogs = function(username, callback) {
Blog.find().where("author", username).
exec(function(err, blogs) {
// docs contains an array of MongooseJS Documents
// so you can return that...
// reverse does an in-place modification, so there's no reason
// to assign to something else ...
blogs.reverse();
callback(err, blogs);
});
};

然后,调用它:

userBlogs(req.user.username, function(err, blogs) {
if (err) {
/* panic! there was an error fetching the list of blogs */
return;
}
// do something with the blogs here ...
res.redirect('/');
});

您还可以对字段进行排序(例如博客文章日期):

Blog.find().where("author", username).
sort("-postDate").exec(/* your callback function */);

上述代码将根据名为 postDate 的字段按降序排序(替代语法:sort({ postDate: -1})

关于node.js - Model.find().toArray() 声称没有 .toArray() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858299/

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