Mongoose填充2个文件和2个集合返回空数组

时间:2017-05-03 19:20:12

标签: node.js mongodb mongoose mongoose-populate

我遇到的问题是我的populate查询返回一个空数组。我知道无数的帖子,但没有一个为我提供新的见解。

我的第一个架构: station.js

var stationSchema = new Schema({ 
    _id: Number, 
    Tripcount: [{ type: Number, ref: 'Tripcount'}]
},
    {collection: 'stations'}
);
module.exports = mongoose.model('Station', stationSchema);

我的第二个:trips.js

var tripSchema = new Schema({
    _id: Number,
    Tripcount: Number
},
    {collection: 'trips'}
);
module.exports = mongoose.model('Tripcount', tripSchema);

我的查询看起来像这样,根据大多数答案,这应该做的工作:

var Station = require('./station.js');
var query = Station.find()
        .populate({
            path: 'Tripcount',
            model : 'Tripcount'
        });
        query.exec(function(err, stations){
            if(err)
                res.send(err);
            res.json(stations);
        });

使用Postman获取电台,它显示Tripcount: []。我有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我想我会根据之前的评论添加另一个答案。您的数据似乎没有连接起来。 Mongoose populate将获取Station的Tripcount数组中的值,并尝试使用_id字段在Tripcount集合中查找Tripcount对象,因此假设您有以下工作站

{
  _id: 1,
  Tripcount: [100, 101, 102]
}

在您的Tripcount Collection中,您需要以下内容才能与上面的站点匹配

[
  {
    _id: 100,
    Tripcount: 2
  },
  {
    _id: 101,
    Tripcount: 4
  },
  {
    _id: 102,
    Tripcount: 6
  },
]

然后,当您运行查询时,您将获得以下内容

{
  _id: 1,
  Tripcount: [
    {
      _id: 100,
      Tripcount: 2
    },
    {
      _id: 101,
      Tripcount: 4
    },
    {
      _id: 102,
      Tripcount: 6
    },
  ]
}

答案 1 :(得分:0)

您可以尝试以下方法吗?将空对象传递给find方法。

var Station = require('./station.js');
var query = Station.find({})
        .populate({
            path: 'Tripcount',
            model : 'Tripcount'
        });
        query.exec(function(err, stations){
            if(err)
                res.send(err);
            res.json(stations);
        });