为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕莱坞森 2022-09-02 16:19:49
我对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 创建和过滤。发布请求过滤器请求但是,如果我试图指出数量,它不会出现在响应中。以数量发布请求以上一个文档 ID 结尾的筛选器请求有我的问题是:如何以我需要的方式创建订单(物料ID和数量必须保留)以及如何对它们执行过滤操作?
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

我的错误在于我如何创建订单以及我提出过滤请求的方法。


创建以数组类型存储数据的订单的正确方法如下


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”参数一起使用。


查看完整回答
反对 回复 2022-09-02
  • 1 回答
  • 0 关注
  • 52 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信