De modèle.find().toArray() en prétendant ne pas avoir .méthode toArray()
Je suis très nouveau à nodejs et mongodb et suis en train de rassembler mes propres blogs de l'application. J'ai un problème en essayant de requête par le biais de mon "Blog" modèle pour ceux avec un nom d'utilisateur spécifique. Lorsque j'essaie d'exécuter
var userBlogs = function(username) {
ub = Blog.find({author: username}).toArray();
ub = ub.reverse();
};
J'obtiens une erreur.
TypeError: Object #<Query> has no method 'toArray'
Je sais globales sont mauvais, mais je viens d'essayer de le faire fonctionner. Les Mongo de la documentation prétend qu'un curseur est retourné, ce qui peut avoir de la méthode toArray() appelée sur elle. Je n'ai aucune idée de pourquoi ça ne fonctionne pas. Voici mon schéma/modèle de création:
var blogSchema = mongoose.Schema({
title: {type:String, required: true},
author: String,
content: {type:String, required: true},
timestamp: String
});
var Blog = mongoose.model('Blog', blogSchema);
Voici le /login et /readblog demandes
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('/');
});
Le résultat de fin est censé fonctionner avec ce 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
Comment puis-je obtenir de la requête à la sortie d'un tableau, ou même de travailler comme un objet?
- devrait ajouter "mangouste" à vos tags
Vous devez vous connecter pour publier un commentaire.
La
toArray
fonction existe sur leCursor
de classe de la Maternelle MongoDB NodeJS pilote (référence). Lefind
méthode dans MongooseJS renvoie uneQuery
objet (référencee). Il existe quelques façons dont vous pouvez faire des recherches et de résultats.Comme il n'y a pas des appels synchrones dans le NodeJS pilote pour MongoDB, vous aurez besoin d'utiliser un modèle asynchrone dans tous les cas. Exemples pour MongoDB, qui sont souvent en JavaScript à l'aide de la MongoDB Console implique que le pilote natif prend également en charge des fonctionnalités similaires, ce qui n'est pas.
Alors à l'appeler:
Vous pouvez aussi faire le tri sur un champ (comme un blog date par exemple):
Le code ci-dessus permettrait de trier dans l'ordre décroissant basé sur un champ appelé
postDate
(syntaxe:sort({ postDate: -1})
.Date
.Vous devez utiliser la fonction de rappel de trouver:
Maintenant vous pouvez obtenir vos blogs à l'appel de cette fonction:
Essayer quelque chose le long des lignes de: