使用填充来显示用户名而不是 ID

using populate to display username instead of id

本文关键字:ID 用户 填充 显示      更新时间:2023-09-26

我正在用猫鼬运行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

请帮助我以正确的方式使用填充方法。

感谢,

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

因此,您不能使用其他字段(如 id),您需要customerId更改为:

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

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