发现没有处理mongoose文件

时间:2016-12-12 21:37:25

标签: node.js mongodb mongoose mongoose-schema

我的模型看起来像这样

/* models/songs.js */
var mongoose = require('mongoose');

var SongsSchema = new mongoose.Schema({
    genres: [ String ],
    popularity: Number,
    trackId: String,
    artistIds: [ String ],
    users: [ String ],
    trackName: String // human readability
});

var Songs = mongoose.model("Songs", SongsSchema);

module.exports = {
  Songs: Songs
};

这就是我的路线

/* routes/index.js */
var mongoose = require('mongoose');
var Songs = mongoose.model('Songs');

router.get('/api/genre', function(req, res, next) {
  var genre = req.query.genre.replace(/%26/, '&');
  genre = req.query.genre.replace(/-/g, ' ');

  console.log('attempting to find', genre);
  Songs.find({
    genres: genre
  }, function(err, songs, count) {
    console.log('count', count);
    console.log('songs', songs);

    res.json(songs.map(function(song) {
      console.log('hello ', song);
      return song.trackId;
    }));
  });
});

"试图找到"注销完全正常,但Songs.find回调中的所有行都没有注销。关于这一点的奇怪部分是,它没有给我任何错误。另一个奇怪的事情是我也试过在routes/index.js的其他部分使用了Songs.find并且它们工作正常。我也尝试在我的歌曲文档中使用findOne和其他功能,但它们似乎无法正常工作。我也尝试过查看其他StackOverflow问题,但他们似乎都没有我的答案。

2 个答案:

答案 0 :(得分:0)

callback查询中的find有两个参数,first一个是errorsecond一个是array of mathced documents

在您的查询中,您提供了3个参数。将其更改为2并查看是否有效。我猜,它会毫无问题地工作。

对于count,您可以执行songs.length

执行此操作:

Songs.find({
    genres: genre
  }, function(err, songs) {
    console.log('count', songs.length);
    console.log('songs', songs);

    res.json(songs.map(function(song) {
      console.log('hello ', song);
      return song.trackId;
    }));
  });

答案 1 :(得分:0)

试试这个

Songs.find({
  genres: genre
}).exec(function(err, songs) {
    console.log('songs', songs);
    res.json(songs.map(function(song) {
      console.log('hello ', song);
      return song.trackId;
    }));
});