使用populate显示用户名而不是id

时间:2014-04-06 11:30:43

标签: javascript mongodb express mongoose

我正在使用mongoosejs运行Expressjs我在集合CustomerId之间建立了连接,如下所示:

.
.
/**
* Customer Schema
*/
var CustomerSchema = new Schema({
    id : Number,
    name: String,
    joined: { type: Date, default: Date.now },
    city: String
});

mongoose.model('Customer', CustomerSchema);
.
.
/**
* Order Schema
*/
var OrderSchema = new Schema({
    id : Number,
    products: [Schema.Types.Mixed],
    total: Number,
    comments: String,
    customerId: {type: Number, ref: 'Customer'}
});

mongoose.model('Order', OrderSchema);
.
.
exports.customerOrders = function (req, res) {
   return Order.find({customerId: req.params.customerId}, function (err, orders) {
       Order.populate(orders, {path: 'customerId', model: 'Order'}, function (err, orders) {
        if (!err) {
            return res.json(orders);
        } else {
            return res.send(err);
        }
    });
});
};

上面的代码生成以下错误:

{
  message: "Cast to ObjectId failed for value "1" at path "_id"",
  name: "CastError",
  type: "ObjectId",
  value: 1,
  path: "_id"
}

对象之间的关系为id_id

请帮我以正确的方式使用populate方法。

感谢名单,

1 个答案:

答案 0 :(得分:1)

Mongoose的populate功能仅支持使用_id字段查找引用集合中的相关文档。

因此,您无法使用id之类的其他字段,并且您需要将customerId更改为:

customerId: {type: ObjectId, ref: 'Customer'}

OrderSchema中,然后使用客户的_id值填充它。