在我的webapp中,在订购(SingleOrder)产品后,客户应检查优惠。如果可用,那么我应该将订单添加到ComboOfferOrder。
在那里,我想检查订单的付款状态。另外,我必须得到整个产品清单。
我在后端的数据库中拥有所有值。但是我无法在'SingleOrder'中为我的api方法填充任何对象。
我有以下架构。
*User*
{
name : String,
email : Sring,
role : String
}
*BankTransaction*
{
type : String,
transationReference: String,
date : Date,
amount : Number
}
*ComboOfferOrder*
{
customer :{
type :Schema.ObjectId,
ref : 'User'
},
order : {
type :Schema.ObjectId,
ref : 'SingleOrder'
},
productList : [{
type :Schema.ObjectId,
ref : 'Product'
}]
discount : Number,
totalCost : Number,
paymentStatus :String,
deliveryStatus : String
}
*SingleOrder*
{
code: String,
products : {
groceries:[{
type :Schema.ObjectId,
ref : 'Product'
}],
other:[{
type :Schema.ObjectId,
ref : 'Product'
}]
},
billingAddress: String,
deliveryAddress : String,
payment:{
status : String,
transaction :{
type :Schema.ObjectId,
ref : 'BankTransaction'
}
}
}
*Products*
{
name : String,
cost : Number,
expiryDate : Date
}
我的api
mongoose.model('ComboOfferOrder')
.findOne({
_id: comboOfferOrderId
})
.select('order')
.exec(function(err, comboOfferOrder) {
var paths = [
{path : "payment.status"},
{path : "payment.trasaction"},
{path : "products.groceries"},
{path : "products.other"}
];
mongoose.model('comboOfferOrder').populate(comboOfferOrder.order,paths,function(err, singleOrder) {
if (err) {
return deferred.reject(err);
}
return deferred.resolve(comboOfferOrder.order);
});
});
在结果中,我只得到“payment.status”,“payment.trasaction”,products.groceries“,”products.other“的objectIds
请让我知道解决方案。谢谢。
答案 0 :(得分:1)
您无法使用mongoose填充嵌套字段,因此您必须嵌套回调。
您可以重新阅读populate的文档以获取用法示例。
这应该有效(未经测试):
mongoose.model('ComboOfferOrder')
.findOne({
_id: comboOfferOrderId
})
.select('order')
.exec(function(err, comboOfferOrder) {
comboOfferOrder.populate('order', function(err, singleOrder) {
singleOrder.populate('products.other products.groceries etc...', function(err, singleOrder) {
if (err) {
return deferred.reject(err);
}
return deferred.resolve(singleOrder);
});
});
});
答案 1 :(得分:1)
Populate可让您获得用户朋友的列表,但如果您还想要用户的朋友朋友,该怎么办?指定populate选项告诉mongoose填充所有用户朋友的friends数组:
User.
findOne({ name: 'Val' }).
populate({
path: 'friends',
// Get friends of friends - populate the 'friends' array for every friend
populate: { path: 'friends' }
});