首页 > 解决方案 > E11000 重复键错误集合:amaxon.products 索引:name_1 重复键:{名称:“Nike SLim Shirt”}

问题描述

以下是productShema我的模型productModel.js

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.jsmongodbexpressmongoose

解决方案


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

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

推荐阅读