在mongodb中创建或模拟联接

时间:2014-10-28 19:31:51

标签: javascript node.js mongodb mongoose entity-relationship

我想使用mongoose在mongodb中模拟连接查询。没有嵌套数据,只有两个Schema,其中OrderSchema:_id引用DetailSchema:orderId

获取所有订单然后逐个查询每个细节是一个糟糕的解决方案。我曾尝试在mongoose中使用populate,但这只有在我改变了方案时才有效,而且可能性。我根本无法想到一个干净的方法来做到这一点!

var OrderSchema = mongoose.Schema({
    _id: Number,
    customerId: String,
    employeeId: Number,
    orderDate: String,
    requiredDate: String,
    shippedDate: String,
    shipVia: String,
    freight: Number,
    shipName: 
});
exports.OrderModel = mongoose.model('orders', OrderSchema);

var DetailsSchema = mongoose.Schema({
    orderId: Number,
    productId: 
    quantity: Number,
    discount: Number
});

1 个答案:

答案 0 :(得分:1)

只需将DetailSchema定义更改为定义orderId作为对Order的引用:

var DetailsSchema = mongoose.Schema({
    orderId: {type: Number, ref: 'Order'},
    productId: Number,
    quantity: Number,
    discount: Number
});

这不需要对现有文档中的实际数据进行任何更改,ref只是Mongoose用来了解该字段包含引用的_id模型的元数据。

有了这些,您可以使用populate将订单详细信息提取为:

Details.find().populate('orderId').exec(function(err, details) { ... });