NodeJS Mongoose数据映射

时间:2017-11-23 10:59:50

标签: node.js mongodb mongoose

我正在制作汽车租赁平台。现在我使用了mongoose,设置我的模型,发现我不能填充太深的参考文献。

我有两个型号:汽车,类型和客户。 我试图从我的客户那里收到所有订单。 我目前得到的回复是下面的回复。

"slug": "myslug",
"note": "",
"isReturned": false,
"includedKM": "0",
"price": "0",
"car": {
  "type": "_id"
} 

我把汽车填满了,但我似乎无法填充这种类型。我试过像.populate('car.type')这样的东西但没有结果。我看了这个,显然它太深,不能填充,所以我提出了一个绕过这个的解决方案。

const customer = req.customer;

Order.find({'customer': customer.slug}).populate('car').then(function(orders){

        Car.find(orders).populate('type').then(function(types){
            return res.json(types);
        });


    });

我现在获得的类型是汽车的填充类型。 现在我想将car.type的内容交换到此结果并生成我自己的填充响应。

任何人都知道如何做到这一点?它可能很简单,因为我在两者中都有type_id。只需要将数据从一个映射到另一个。

提前致谢!

3 个答案:

答案 0 :(得分:1)

由于mongoose 4,您可以跨多个级别填充文档。

也许这篇文章会对你有帮助。 mongoose - populate sub-schema sub-array

答案 1 :(得分:0)

找到解决此问题的方法。显然有一个猫鼬插件(深度填充)允许你填充二年级儿​​童参考

答案 2 :(得分:0)

将汽车类型的值作为参数发送,或者在变量中将其置于请求中。

之后你就可以这样做:

 Order.findOneAndUpdate({customer: customer.slug}, {$set: {car.type: value}}, function (err, customer) {
       if (err) {
           return res.status(500).json({
               title: 'An error occured',
               error: err
           });
       }
    res.status(201).json({
            message: 'Success',
            obj: customer
        });
});