Express, Mongoose, db.findOne всегда возвращает один и тот же документ - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь использовать приложение CRUD со средним стеком.Я использую мангуста в Экспресс для вызова MongoDB.Я использую функцию FindOne с указанным параметром, и она всегда возвращает один и тот же (неправильный) документ.

Я знаю, что я подключен к правильной базе данных, так как я получаю документ из этой коллекции, но онвсегда один и тот же документ, независимо от того, что я передаю в качестве параметра.

module.exports = mongoose.model('Player', playersSchema, 'players'); //in player.js

const Player = require('./model/players');

app.get('/api/player/:id', (req, res) =>{
        Player.findOne({id: req.params.playerId},
            function(err, player) {
                if(err) {
                res.json(err);
                }
                else {
                res.json(player);
                }
            });
    });

У меня есть 3 отдельных игрока, с тремя разными полями playerID (38187361, 35167321, 95821442).Я могу использовать Почтальон, чтобы ПОЛУЧИТЬ следующий URL, например:

http://localhost:3000/api/player/anythingyouWantInHere

, и он вернет 38187361, первый документ.Я просматривал этот веб-сайт, много учебных пособий и документацию Mongoose, и я не вижу, что я делаю неправильно.

Я хотел бы в конечном итоге найти по playerId ИЛИ имя пользователя ИЛИ электронную почту, ноодно препятствие за раз ...

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Из документации mongoose findOne , если вы передадите Id нулевое или пустое значение, он запросит внутренне запрос db.players.findOne({}), который будет возвращать первый документ коллекции каждый раз, когда вы выбираете.Поэтому убедитесь, что вы передаете непустой идентификатор здесь.

Примечание: условия не являются обязательными, и если условия пустые или неопределенные, mongoose отправит пустую команду findOne в MongoDB, которая вернет произвольныйдокумент.Если вы запрашиваете _id, используйте вместо него findById ().

0 голосов
/ 03 декабря 2018

Ваш маршрут - «/ api / player /: id», поэтому ключом объекта req.params будет «id», а не «playerId».

Я не знаю, что / где / если вы заполняете параметр playerId, но если вы обновите свой запрос до вызова req.params.id, он должен фактически изменить документ на основе пути, как вам кажетсяхотеть сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...