我想使用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/