如何在猫鼬中正确创建数组架构并按给定条件进行过滤?

我对mongodb和mongoose很陌生,所以我请你帮助我。我有一个API,它可以工作,现在我想通过过滤给定的参数来扩展它。


我有一个订单模型,它指向两个不同的文档集合材料和用户模式,并具有数量元素。


let Order = new Schema({

    materials: 

    {

        type: Array,

        material: { 

            type: mongoose.Schema.Types.ObjectId,

            ref: 'Material'

        },

        qty: {

            type: Number

        }

    },

    userId: {

        type: Schema.Types.ObjectId,

        ref: 'User'

    }

}, {

    collection: 'orders'

})

另外,我有创建订单的方法:


  exports.createOrder = (req, res) => {

    if (!req.body.user) {

        res.status(400).send({message: 'Content can not be empty!'});

    }

    const order = new Order({

        materials: req.body.materials,

        userId: req.body.user

    });

    order

    .save(order)

    .then(data => {

        res.send(data);

    })

    .catch(err => {

        res.status(500).send({

          message:

            err.message || "Some error occurred while creating the Order."

        });

      });

   }

如果我只创建订单填充物料 ID,它会在过滤器请求中按给定的物料 ID 创建和过滤。


发布请求

http://img1.mukewang.com/6311bcb80001bbe006140590.jpg

过滤器请求

http://img3.mukewang.com/6311bcc40001695f04400505.jpg

但是,如果我试图指出数量,它不会出现在响应中。

以数量发布请求

http://img4.mukewang.com/6311bccf00014f4d05890492.jpg

以上一个文档 ID 结尾的筛选器请求

http://img1.mukewang.com/6311bcd80001a74a06090563.jpg

有我的问题是:如何以我需要的方式创建订单(物料ID和数量必须保留)以及如何对它们执行过滤操作?

慕莱坞森
浏览 53回答 1
1回答

慕后森

我的错误在于我如何创建订单以及我提出过滤请求的方法。创建以数组类型存储数据的订单的正确方法如下exports.createOrder = (req, res) => {    if (!req.body.user) {        res.status(400).send({message: 'Content can not be empty!'});    }    const order = new Order({        materials: {material: req.body.materials, qty: req.body.qty},        userId: req.body.user    });    order    .save(order)    .then(data => {        res.send(data);    })    .catch(err => {        res.status(500).send({          message:            err.message || "Some error occurred while creating the Order."        });      });}如您所见,差异是我形成材料阵列的方式。接下来的事情是在过滤器请求中exports.filterOrder = (req, res) => {  Order.find({"materials.material": req.body.material})  .then(data => {    console.log(data);    res.send(data);  })  .catch(err => {    res.status(500).send({      message:        err.message || "Some error occurred while retrieving Orders."    });  });}如果我需要过滤包含必要材料的订单,我需要将数组的子元素放在带有点表示法的引号中。如果需要,这也将与“material.qty”参数一起使用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript