Mongoose 'find' возвращает пустой массив при запросе с условными параметрами - PullRequest
0 голосов
/ 12 июня 2019

У меня есть коллекция некоторых твитов, и мне нужно получить твиты, специфичные для конкретного пользователя. Я использую запрос мангуста "Найти", чтобы найти твиты. Я беру user_id из req.params и использую его как условный параметр, но mongodb возвращает пустой массив.

Я попытался отладить с console.log и user_id, кажется, правильно. Тип 'user_id' - String, что ожидается, и я, похоже, не могу найти причину, по которой возвращается пустой массив, даже если в моей коллекции есть совпадающие записи.

Более того, когда я использую другие условные параметры (кроме пользователя), записи выбираются без проблем.

app.get('/search/:id',(req,res) => {
  var _id = req.params.id;
  if(!users.includes(_id)){
    res.status(400)
    res.send('Sorry... User not present in the list')
  }
  else{
    Tweet.find({user: _id}).then((tweets)=>{
      res.status(200).send(tweets)
    }).catch((e) =>{
      res.status(500).send();
    })
  }
})

Схема моего мангуста:

const Tweet = mongoose.model('Tweet',{ user:{ type: String, trim:true }, text:{ type: String, required: true, trim:true }, verified:{ type: Boolean } })

1 Ответ

0 голосов
/ 12 июня 2019

"Я попытался отладить с помощью console.log, и user_id кажется правильным. Тип 'user_id' - ожидаемая строка, и я не вижу причины, по которой возвращается пустой массив, даже если есть соответствующие записи в моей коллекции. " В соответствии с этим утверждением, вы ищете "user_id" является документом, но вы не можете определить user_id в вашей схеме mongoose

const Tweet = mongoose.model('Tweet',{
  user:{
    type: String,
    trim:true
  },
  text:{
    type: String,
    required: true,
    trim:true
  },
  verified:{
    type: Boolean
  }
})

использовать пользователя вместо идентификатора

app.get('/search/:user',(req,res) => {
  var user = req.params.user;
  if(!users.includes(user)){
    res.status(400)
    res.send('Sorry... User not present in the list')
  }
  else{
    Tweet.find({user: user}).then((tweets)=>{
      res.status(200).send(tweets)
    }).catch((e) =>{
      res.status(500).send();
    })

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