如何将另一个Schema数据添加到模型中?

时间:2017-07-30 13:06:07

标签: javascript node.js mongodb express mongoose

我在Mongodb v3.4.3中使用mongoose

以下是我的图像模型代码

const mongoose = require("mongoose");
const CoordinateSchema = require("./coordinate");

const ImageSchema = new mongoose.Schema({
    image_filename: {
        type: String,
        required: true
    },
    image_url: {
        type: String,
        required: true
    },
    coordinates: [CoordinateSchema],
});

以下是我的CoordinateSchema代码

const mongoose = require("mongoose");

const CoordinateSchema = new mongoose.Schema({
    coordinates : {
        type: Array,
        default: [],
    }
});

module.exports =  CoordinateSchema;

下面是我在快递上运行的api js代码,

    router.post('/receiveCoordinates.json', (req, res, next) => {

        Image.findOneAndUpdate({image_filename:req.body.file_name}).then((image) =>    {


       })
    });

如何完成此代码,以便我可以在Image模型中存储坐标数据。

感谢。

1 个答案:

答案 0 :(得分:1)

<强>更新

要更新findOneAndUpdate内部的坐标,只需检查返回的文档是否未定义(这意味着您的图像未找到)。像这样修改你的api.js代码:

__str__

我猜这是为什么它不起作用。

router.post('/receiveCoordinates.json', (req, res, next) => { Image.findOneAndUpdate({image_filename:req.body.file_name}).then((image) => { if (!image) return Promise.reject(); //Image not found, reject the promise image.where({_id: parent.children.id(_id)}).update({coordinates: req.body.coordinates}) //Needs to be an array .then((coords) => { if (!coords) return Promise.reject(); //If you reach this point, everything went as expected }); }).catch(() => { console.log('Error occurred'); ); }); 中,您正在对 ImageSchema数组进行子嵌套。但CoordinateSchema是已包含数组的文档。

这可能不是你想要的。如果您正在使用 mongoose版本4.2.0或更高版本,则可以将ImageSchema内的CoordinateSchema嵌套为单个文档。像这样重写你的ImageSchema:

CoordinateSchema

如果这不起作用或无法解决您的问题,请告诉我们,以便我们共同努力寻找解决方案。