我想使用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
});
答案 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) { ... });