首页
学习
活动
专区
圈层
工具
发布

猫鼬
EN

Stack Overflow用户
提问于 2016-09-19 10:28:30
回答 1查看 112关注 0票数 0

我有一个orderSchema有一个subdoc productOrder

代码语言:javascript
复制
const paymentTrans = require('./PaymentTrans').schema;
const productOrder = require('./ProductOrder').schema;

const orderSchema = new mongoose.Schema({
    orderId: { type: mongoose.Schema.Types.ObjectId },
    userId : {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    productOrder: [productOrder],
    totalPerOrder: {type: Number, default:''},
    paymentTrans: [paymentTrans]
}, { timestamps: true });

const Order = mongoose.model('Order', orderSchema);

module.exports = Order;

porductOrder模式

代码语言:javascript
复制
const productOrderSchema = new mongoose.Schema({
    sku: { type: String, default: '' },
    name: { type: String, default: '' },
    quantity: { type: Number, default: '' },
    price: { type: Number, default: '' },
    total: { type: Number, default: '' }
});

const ProductOrder = mongoose.model('ProductOrder', productOrderSchema);

module.exports = ProductOrder;

我希望从productOrder order (orderSchema)获得:

尝试了这些

代码语言:javascript
复制
Order.findById(req.body.id)
        .exec(function (err, products) {
            var opts = {
                path: 'productOrder',
                model: 'ProductOrder'
            };

            Order.populate(products, opts, function (ree, products) {
                console.log(JSON.stringify(products));
            });

            res.render('store/cart', {
                title: 'MyCart',
                angularApp: 'storeApp',
                products: products
            });
        });

其中req.body.idorderId,而console中的object是这样的:(对不起,WebStorm没有从控制台复制/粘贴)

--我尝试过的另一种方式

代码语言:javascript
复制
Order.findById(req.body.id, function (err, products) {
        var opts = [
            { path: 'productOrder',  model: 'ProductOrder' }
        ]

        Order.populate(products, opts, function (err, products) {
            console.log(products);
        })
    })

和另一个

代码语言:javascript
复制
Order.find({ _id: req.body.id, userId: req.user._id })
        .populate({
            path: 'productOrder',
            populate: {
                path: 'productOrder',
                model: 'ProductOrder'
            }

        })
        .exec(function (err, productOrder) {
            //products.forEach(function(elem){
                console.log("products = " + JSON.stringify(productOrder));
            //});

            console.log("REQ._ID " + req.body.id);
            res.render('store/cart', {
                title: 'MyCart',
                angularApp: 'storeApp',
                products: productOrder
            });
        });

最后他们都给了我整个doc的订单。我怎样才能拿到订单上的产品?(productOrder)谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-09-19 11:17:20

您可以使用select函数,然后按以下方式填充

代码语言:javascript
复制
Order.findOne({ _id: req.body.id})
    .select('-_id productOrder')
    .populate('productOrder')
    .exec(function (err, orderObj) {
      if(!err) {
        var productOrder = orderObj.productOrder;
        //products.forEach(function(elem){
            console.log("products = " + JSON.stringify(productOrder));
        //});

        console.log("REQ._ID " + req.body.id);
        res.render('store/cart', {
            title: 'MyCart',
            angularApp: 'storeApp',
            products: productOrder
        });
      }
    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39570938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档