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

获取所有订单然后逐个查询每个详细信息是一个糟糕的解决方案。我曾尝试在猫鼬中使用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
});

最佳答案

只需更改您的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) { ... });

关于javascript - 在mongodb中建立或模拟联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26616942/

10-09 06:46