【问题标题】:Mongoose Populate does nothingMongoose Populate 什么都不做
【发布时间】:2021-05-17 00:00:06
【问题描述】:

我是 Node.js 的新手,尤其是 Mongoose。我正在通过教程学习。 我想我写了一个很好的简单代码来显示用户和他们的建筑物,但是 populate() 函数只是显示对象的 _id :

我的模型:

(...) // omitted code

var userSchema = new Schema({
  login: {
    type: String,
    required: 'Login is required', 
    unique: true,
    index: true,
    uniqueCaseInsensitive: true
  },
    (...) // omitted code
  ,
  building: {
    type: Schema.Types.ObjectId,
    ref: 'Building'
  }
  createdAt: {
    type: Date,
    default: Date.now
  }
});

var buildingSchema = new Schema({
  address: {
    type: addressSchema,
    index: true,
    unique: true
  },
  planPath: String,
  createdAt: {
    type: Date,
    default: Date.now
  }
});

module.exports = mongoose.model('Building', buildingSchema);
module.exports = mongoose.model('User', userSchema);

我的路线:

  app.route('/api/v1/users/:userId')
    .get(parkingshare.readUser);

  app.route('/api/v1/buildings/:buildingId')
    .get(parkingshare.readBuilding);

我的控制器:

exports.readUser = function(req, res) {
  user.findById(req.params.userId, function(err, user) {
    if (err)
      res.send(err);
    res.json(user.populate('building'));
  });
};

exports.readBuilding = function(req, res) {
  building.findById(req.params.buildingId, function(err, building) {
    if (err)
      res.send(err);
    res.json(building);
  });
};

我用这些命令插入数据:

curl --header "Content-Type: application/json"   --request POST   --data '{"address" : {"number":"01", "street":"test", "postCode":"01010", "city":"test"}, "planPath":""}' http://127.0.0.1:3001/api/v1/buildings

结果:

{
    "_id": "6027c85fce48810533194d08",
    "address": {
        "number": 1,
        "street": "test",
        "postCode": "01010",
        "city": "test"
    },
    "planPath": "",
    "createdAt": "2021-02-13T12:38:55.677Z",
    "__v": 0
}
curl --header "Content-Type: application/json"   --request POST   --data '{"login":"admin","password":"admin","lastName":"","firstName":"test","building": {"_id": "6027c85fce48810533194d08"},"parkLocations":[]}'   http://127.0.0.1:3001/api/v1/users

结果:

{
    "_id": "6027cab9ce48810533194d0f",
    "login": "admin",
    "password": "admin",
    "lastName": "",
    "firstName": "test",
    "building": "6027c85fce48810533194d08",
    "parkLocations": [],
    "buildingAdmin": true,
    "superAdmin": true,
    "createdAt": "2021-02-13T12:42:40.908Z",
    "__v": 0
}

现在,当我尝试通过 readUser 方法获取用户时,该方法已通过我的浏览器填充('building'):

json result

为什么 populate() 在这里不起作用?我很困惑。

【问题讨论】:

    标签: node.js mongodb express mongoose mongoose-populate


    【解决方案1】:

    试试吧:

    exports.readUser = async function (req, res) {
      try {
        let result = await user.findById(req.params.userId).populate("building");
        res.json({ result });
      } catch (err) {
        res.send(err);
      }
    };
    

    exports.readUser = function(req, res) {
        user.findById(req.params.userId).populate('building').exec(function (err, result) {
            if (err)  res.send(err);
            res.json({ result });
          })
    }
    

    【讨论】:

    • 天哪,谢谢!我从没想过这是问题所在……我必须学习很多关于“异步”和“等待”的知识
    猜你喜欢
    • 2020-06-08
    • 2017-10-05
    • 2016-10-29
    • 2023-03-30
    • 2018-07-06
    • 2018-02-06
    • 2019-03-08
    • 2016-12-24
    • 2017-04-18
    相关资源
    最近更新 更多