我在Mongodb v3.4.3中使用猫鼬

下面是我的图像模型代码

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;


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

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

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


       })
    });


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

谢谢。

最佳答案

更新

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

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数组。但是CoordinateSchema是一个已经包含数组的文档。

这可能不是您想要的。如果您使用的是猫鼬版本4.2.0或更高版本,则可以将CoordinateSchema嵌套在ImageSchema中作为单个文档。像这样重新编写ImageSchema:

// ...

const ImageSchema = new mongoose.Schema({
    // ...
    coordinates: CoordinateSchema,
});


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

10-08 07:40