我目前正在try 使用cloudinary的详细信息更新此MongoDB文档.

const mongoose = require('mongoose');
const CarSchema = new mongoose.Schema({
    Name: {
        type: String,
        required: true
    },

    Model: {
        type: String,
        required: true
    },

    Year: {
        type: String,
        required: true
    },

    engine: {
        type: String,
        required: true
    },

    color: {
        type: String
    },

    status: {
        type: String,
        enum: ['available', 'unavailable'],
        default: 'available'
    },

    photos: [
        {
            imageUrl: {
                type: String
            },

            publicId: {
                type: String
            }
        }
    ]
});

module.exports = mongoose.model('Car', CarSchema);

这是我的路由.js文件

router.put('/upload/:id', isAuthUser, upload.single('image'), async (req, res) => {
    // let car = await Car.findById(req.params.id);
    try {
        const result = await cloudinary.uploader.upload(req.file.path);
        console.log(result);
        // Updating thr car document
        const updatedCar = await Car.updateOne(
            {
                _id: req.params.id
            },
            {
                $push: {
                    'photos.$.imageUrl': result.url,
                    'photos.$.publicId': result.public_id
                }
            }
        );
        return res.status(200).json(updatedCar);
    } catch (error) {
        console.log(error.stack);
        return res.status(500).json(error.stack);
    }
});

以下是我不断遇到的错误:

MongoServerError: The positional operator did not find the match needed from the query.
    at C:\Users\userpc\Desktop\CAR-HIRE-APP\node_modules\mongodb\lib\operations\update.js:85:33
    at C:\Users\userpc\Desktop\CAR-HIRE-APP\node_modules\mongodb\lib\cmap\connection_pool.js:273:25
    at handleOperationResult (C:\Users\userpc\Desktop\CAR-HIRE-APP\node_modules\mongodb\lib\sdam\server.js:327:20)
    at Connection.onMessage (C:\Users\userpc\Desktop\CAR-HIRE-APP\node_modules\mongodb\lib\cmap\connection.js:215:9)
    at MessageStream.<anonymous> (C:\Users\userpc\Desktop\CAR-HIRE-APP\node_modules\mongodb\lib\cmap\connection.js:63:60)
    at MessageStream.emit (node:events:527:28)
    at processIncomingData (C:\Users\userpc\Desktop\CAR-HIRE-APP\node_modules\mongodb\lib\cmap\message_stream.js:108:16)
    at MessageStream._write (C:\Users\userpc\Desktop\CAR-HIRE-APP\node_modules\mongodb\lib\cmap\message_stream.js:28:9)
    at writeOrBuffer (node:internal/streams/writable:389:12)
    at _write (node:internal/streams/writable:330:10)

推荐答案

$push阶段错误:

{
  $push: {
           'photos.$.imageUrl': result.url,
           'photos.$.publicId': result.public_id
         }
}

$是位置运算符,指数组中特定元素的索引.你不需要它.试试这个:

{
  $push: {
           'photos': {
               $each: [
               {
                 imageUrl: result.url,
                 publicId: result.public_id
               }
               ]
             }
         }
}

Node.js相关问答推荐

Express 4.18正文解析

Sveltekit停靠的应用程序找不到从Build导入的包

如何在Mongoose中调用动态Collection ?

Nestjs swc 错误:找不到模块项目路径/src/app.module

为什么 docker 容器内的应用程序无法访问它自己的 API 端点?

Nodejs 从链接数组中获取数据并保存到 mongodb

如何使用 $PATH 变量在系统中全局自动安装 bash 脚本?或者重写脚本到node

在 Header 中使用 Authorization 方法和新的附加参数:accessToken 有什么区别?

看起来这段代码try GET 请求发送的值变为空白

多个 Axios 请求合并

Mongoose,如何一次更新多个?

node_modules 中 .bin 文件夹的用途是什么?

ISODate 未定义

如何为 node.js 服务器分配域名?

为什么我们要为 Angular 2.0 安装 Node.js?

按日期时间字段获取最新的 MongoDB 记录

Selenium WebDriver 等到元素显示

nodeJS - 如何使用 express 创建和读取会话

Google Firebase 错误(函数返回未定义、预期的 Promise 或值)

我无法全局安装 nodemon,nodemon无法识别