Ich versuche, den Highscore-Post eines Users zu bekommen. Um dies zu tun, frage ich das Post
Modell, finden Beiträge mit ihrer user._id
als author
in der Post.Warum wird nicht ausgewählt (Mungo-Abfrage) funktioniert?
Das funktioniert ganz gut.
Allerdings möchte ich nur die _id
und die voteCount
des Beitrags greifen. Aus irgendeinem Grund eine select
Hinzufügen wirft nur Fehler und sagt, dass es eine unprocessable entity
Hier ist die Abfrage:
getHighscorePost(req, res, next) {
const firebaseUID = req.params.uid;
User.findOne({ firebaseUID })
.select('_id')
.then(user => {
Post.find({ author: user._id })
.select('_id, voteCount')
.sort({ voteCount: -1 })
.limit(1)
.then(post => res.send(post[0]))
.catch(next);
})
.catch(next);
}
Ich habe versucht, die select
vor/nach jedem der limit
und sort
Optionen setzen.
Wenn ich die select
weglassen, dann protokolliert die Post-Konsole einfach gut so;
{ _id: '589ddffeb4a1477fa04d632a',
author: '589ddffeb4a1477fa04d6326',
text: 'This is post two. It belongs to Matt too',
createdAt: 2,
expiresAt: 1000000000000000000,
university: 'University of Aberdeen',
voteCount: 3,
uniOnly: false,
__v: 0,
categories: [ 'music' ],
votes: [],
commenters: [],
comments: [],
expired: false,
commentCount: 0,
id: '589ddffeb4a1477fa04d632a' }
Mit dem select
hinzugefügt, ich habe nichts in den Körper gelangen. Der Fehler kommt zurück als:
{ error: 'Cannot read property \'length\' of undefined' }
Was passiert hier?
Danke
Ein paar Kommentare: Sie brauchen nur die äußere '.catch (next)', es wird auch Fehler von der inneren Versprechen zu fangen. Sie sollten auch 'Post.find' zurückgeben. Versuchen Sie, '.exec()' zur Abfrage vor '.then() 'hinzuzufügen. – ChemicalRocketeer