如何在模式内部发布模式数组?

时间:2018-11-05 07:42:21

标签: node.js express mongoose

我有两种模式,一种称为function setindex(nt::T,y,v::Val{var}) where {T,var} if var ∉ fieldnames(T) return nt else T(s == var ? y : w for (s,w) in pairs(nt)) end end ,另一种称为function setindex(nt::T,y,v::Val{var}) where {T,var} if var ∉ fieldnames(T) return nt else T(k == var ? y : nt[k] for k in fieldnames(T)) end end 。基本上,我希望路径position包含path模式的数组。

首先,这是我的schema模式:

position

简单的,只包含一些浮点数。然后,这就是我的position模式,就像const mongoose = require('mongoose'); var Schema = mongoose.Schema; var positionSchema = new Schema({ position : { x : Number, y : Number }, orientation : { x : Number } }); var Position = mongoose.model('Position', positionSchema); module.exports = Position 模式的父亲一样:

path

所以现在,我想使用邮递员将一些位置数组发布到路径架构,其代码如下所示:

position

但是当我在邮递员中使用此示例时:

const mongoose = require('mongoose');
var Schema = mongoose.Schema;

var Position = require('./position');

var pathSchema = new Schema({
    path : [{type: Schema.ObjectId, ref: 'Position'}]
});

module.exports = mongoose.model("Path", pathSchema);

我得到一个错误:

router.post("/", (req,res,next)=>{
    const _path = new Path({
        path : req.body.path
    })
    .save()
    .then(docs => {
        const response = {
            status: 201,
            message: "Path has been added succesfully",
            path_ID: docs.path_id,
            path : docs.path
        };
        res.status(201).json(response);
    })
    .catch(err => {
        res.status(500).json({
            message: err
        });
    });
});

所以我想这是我的post方法的问题,因为我的服务器无法正确识别该发布消息并等待其他消息。

我在这里做什么错了?

1 个答案:

答案 0 :(得分:0)

path中的

pathSchema是对Position文档的引用数组。这意味着在尝试为其分配对象数组时,path必须存储ObjectId的数组。您必须先保存Position的值,然后再将其_id的值压入path数组:

router.post("/", (req,res,next)=>{
    const savePositions = req.body.path.map(position => {          // create promises that save Position documents
        return new Position(position).save();
    });

    Promise.all(savePositions)                                     // run all save promises in parallel
      .then(positions => positions.map(position => position._id))  // get an array of ids of saved documents
      .then(positionsIds => new Path({ path: positionsIds }).save())
      .then(savedPath => {
        // do the job with saved Path
      })
      .catch(err => {
        // handle the error
    });
});