Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB引用和端点_Javascript_Mongodb_Mongoose - Fatal编程技术网

Javascript MongoDB引用和端点

Javascript MongoDB引用和端点,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,当我使用ObjectID引用过滤数据时,我试图使端点显示一个名称。我有这个模式 let movieSchema = mongoose.Schema({ Title:{type: String, required:true}, description: {type: String, required:true}, genre: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Genre'}], director: [{ type: mo

当我使用ObjectID引用过滤数据时,我试图使端点显示一个名称。我有这个模式

let movieSchema = mongoose.Schema({
  Title:{type: String, required:true},
  description: {type: String, required:true},
  genre: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Genre'}],
  director: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Director'}],
  Actors: [String],
  imageUrl: String,
  featured: Boolean
});

let genreSchema = mongoose.Schema({
  name: {type: String, required: true},
  description: String
});
我目前有一个端点来显示所有类型ID为的电影,如下所示

app.get('/movies/:genre',  passport.authenticate('jwt', {session:false}), (req, res) => {
  const genre = req.params.objectID;
  Movies.find({ 'genre.type':genre })
    .then((movies) => {
      res.status(201).json(movies);
    })
    .catch((err) => {
      console.error(err);
      res.status(500).send('Error: ' + err);
    });
});
我希望实现的目标是,让端点不使用实际ID,而是使用名称。因此,我仍然可以使用数据库中的引用,但我可以使用端点“/movies/thrillers”而不是“/movies/601511816…”等


这可能吗?

谢谢你澄清你的问题。有两种可能的方法来做你想做的事情,尽管它们或多或少是等价的。整个想法是用你想要过滤的流派名称查询你的流派:

app.get('/movies/:genre',  passport.authenticate('jwt', {session:false}), (req, res) => {
    Genres.find({ name: req.params.objectID })
        .then((genre) => {
            Movies.find({ 'genre.type': genre._id })
        })
        .then((movies) => {
            res.status(201).json(movies);
        })
        .catch((err) => {
            console.error(err);
            res.status(500).send('Error: ' + err);
        });
  });
一种更优雅的方法是将流派名称填充为电影集合中的虚拟字段,然后在填充名称后查询电影集合。这两种情况基本相同。
在任何情况下,我建议您为端点考虑更标准的查询语法。类似于
/movies?genre=:genreId
的功能将使您在将来想要向路由添加任何进一步的查询选项时变得更容易。

对不起,我很难理解您的/movies/:流派端点是否已经工作,您是否希望一个新端点/movies/:title以相同的方式工作,或者您已经工作的是端点/movies/:movieId,它是流派过滤器,您无法进行工作谢谢,为了澄清上述工作,工作端点是/movies/:genre,但是它通过使用模式中引用的genreID工作,这对我来说并不理想,因为url最终是/movies/{long number}。我希望它能像电影/科幻那样工作,而不必更改我的数据库