Mangouste trouver des dix dernières entrées dans la base de données
Je fais un simple Réseau Social. J'ai tous de la saisie des messages, des utilisateurs, etc, c'est fait. La seule chose de mal le droit maintenant il est à peu près juste une salle de chat. Chaque fois que vous publiez quelque chose sur quelqu'un, la seule personnes qui peut afficher sont les personnes sur la page à la fois. Lorsque vous actualisez, tous les postes ont disparu. Ici est la partie technique de ce que je fais quand les messages sont envoyés, et ce que je veux faire.
Chaque fois que vous publiez un post, il fait des choses qui ne sont pas important, je ne vais pas en dresser la liste. Mais il y a une partie qui est important, de l'envoyer au serveur NodeJS. Voici le code qu'il utilise:
function sendPost(cont) {
socket.emit("newPost", username, uid, cont, page);
model.posts.unshift(new Post(username, uid, cont, page)); //You don't need to worry about this
}
Comme vous pouvez le voir, il émet un "newPost" avec le nom d'utilisateur, id utilisateur, du contenu et de la page. Sur le serveur, il reçoit des messages avec cela, et puis insère dans une base de données.
socket.on("newPost", function (name, id, cont, page) {
var thePost = new Post({name: name, cont: cont, id: id, page: page});
console.log("Received a new post by "+thePost.name+"(ID of "+thePost.id+"), with the content of \""+thePost.cont+"\", on the page "+thePost.page);
socket.broadcast.emit("Post", name, id, cont, page);
console.log("Post sent!");
console.log("Putting post in database...");
thePost.save(function (err, thePost) {
if (err) {
console.log("Error inserting into database: "+err);
} else {
console.log("Put into database finished!");
}
});
});
Maintenant, pour mon réel problème/question. Chaque fois que le chargement de la page, il envoie une requête au serveur comme ceci:
socket.emit("getPrevious", curPage, amount);
Que de toutes les œuvres de bien. Sur le serveur, il reçoit et effectue les opérations suivantes:
socket.on("getPrevious", function(curPage, amount) {
console.log("Someone requested a page update, sending it to them...");
Post.find({'page': curPage}).sort('-date').execFind(function(err, post){
console.log("Emitting Update...");
socket.emit("Update", post.name, post.id, post.cont);
console.log("Update Emmited");
});
});
Que le code ne trouverez qu'Un seul des derniers messages sur cette page. Je veux trouver le dernier des postes, puis de les envoyer de nouveau. Même avec ce qui se passe qu'une seule fois, quand je vais à la page, il affiche ceci:
null says
Mes deux questions sont: Comment pourrais-je faire trouver les derniers posts, et pourquoi, avec seulement ceci, qu'il ne retourne "null"?
Merci il avance. Si vous avez besoin d'un code, dites-moi. Si quelque chose n'est pas clair, dis-le moi.
OriginalL'auteur Beaurocks16 | 2013-05-23
Vous devez vous connecter pour publier un commentaire.
Dans le
execFind
rappel, lepost
paramètre est un tableau de messages, pas seulement un. C'est pourquoi vous obteneznull says
quand vous essayez de le traiter comme un seul poste.Aussi, si vous voulez seulement la plus récente 10, vous pouvez appeler
limit(10)
dans votre requête de la chaîne. Vous devriez également utiliserexec
au lieu deexecFind
que c'est un peu plus clair.Donc quelque chose comme:
Ok, un problème de plus. Je ne que la, toutes les mises à jour sont envoyées, tout est bien sauf qu'il ne semble pas être le tri. .de tri ('date') et .de tri('date') ou non .de tri à tous les donne les mêmes résultats. Pouvez-vous nous éclairer sur ce point?
Avez-vous une idée pourquoi le tri ne fonctionne pas?
Avez-vous un
date
champ défini dans votre schéma et dans lePost
documents que contient la date de chaque document que vous êtes à la recherche trier par?Ensuite, le tri sur qu'il ne va pas très bien fonctionner. 🙂 Vous aurez soit besoin d'ajouter et de remplir ce champ, ou tri sur
_id
plutôt si son rapprochement de temps de création répond à vos fins.OriginalL'auteur JohnnyHK