【问题标题】:E11000 duplicate key error collection: amaxon.products index: name_1 dup key: { name: "Nike SLim Shirt" }E11000 重复键错误集合:amaxon.products 索引:name_1 重复键:{名称:“Nike SLim Shirt”}
【发布时间】:2021-08-28 00:43:06
【问题描述】:

以下是我productModel.js中的productShema模型:

import mongoose from 'mongoose'

const productSchema = new mongoose.Schema(
  {
    name: { type: String, required: true, unique: true },
    image: { type: String, required: true },
    brand: { type: String, required: true },
    category: { type: String, required: true },
    description: { type: String, required: true },
    price: { type: Number, required: true },
    countInStock: { type: Number, required: true },
    rating: { type: Number, required: true },
    numReviews: { type: Number, required: true },
  },
  {
    timestamps: true,
  }
)
const Product = mongoose.model('Product', productSchema)

export default Product

这就是我在productRouter.js 中使用它的方式:

import express from 'express'
import Product from '../models/productModel.js'
import expressAsyncHandler from 'express-async-handler'
import data from '../data.js'

const productRouter = express.Router()

productRouter.get(
  '/',
  expressAsyncHandler(async (req, res) => {
    const products = await Product.find({})
    res.send(products)
  })
)

productRouter.get(
  '/seed',
  expressAsyncHandler(async (req, res) => {
    // await Product.remove({});
    const createdProducts = await Product.insertMany(data.products)
    res.send({ createdProducts })
  })
)

productRouter.get(
  '/:id',
  expressAsyncHandler(async (req, res) => {
    const product = await Product.findById(req.params.id)
    if (product) {
      res.send(product)
    } else {
      res.status(404).send({ message: 'Product not found' })
    }
  })
)

export default productRouter

data.products 我有 6 个产品,然后我尝试从http://localhost:5000/api/products/seed 这个地址获取数据,它显示了这个:

“E11000 重复键错误集合:amaxon.products 索引:name_1 重复键:{名称:“Nike SLim Shirt”}”

当我尝试从http://localhost:5000/api/products 获取数据时,它只给了我一种产品。我该如何解决这个问题?

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    由于name 属性设置为唯一,请确保:

    1. 在再次调用seed 端点之前删除存储在Product mongo collection 中的所有数据。 (您已将其注释掉 - await Product.remove({});
    2. data.js 中的所有名称都是唯一的。

    【讨论】:

      【解决方案2】:

      您正在尝试插入数据,而不是使用find。检查这个:

      productRouter.get(
        '/seed',
        expressAsyncHandler(async (req, res) => {
          // await Product.remove({});
          const createdProducts = await Product.find({})
          res.send({ createdProducts })
        })
      )
      

      【讨论】:

        猜你喜欢
        • 2018-07-21
        • 1970-01-01
        • 2021-10-25
        • 2021-11-04
        • 2019-07-11
        • 1970-01-01
        • 2019-06-17
        • 2016-08-17
        • 2017-03-02
        相关资源
        最近更新 更多