简单来说,我正在使用ReactJS,Node.js + mongoDB创建一个Web应用程序。它的目的是保存食物和产品的列表,并从中轻松创建购物清单。
我对Node.js和MongoDB完全没有经验,并且沿着在学习创建这个应用程序的方法,因此我需要你的帮助来解决一个问题。
mongoose中的productSchema看起来像这样:
{
uniqueId: {
type: String,
required: true,
default: () => nanoid(),
index: { unique: true },
},
productName: {
type: String,
required: true,
},
}
字符串
mealSchema:
{
uniqueId: {
type: String,
required: true,
default: () => nanoid(),
index: { unique: true },
},
mealName: {
type: String,
required: true,
trim: true,
},
products: [
{
uniqueId: {
type: String,
required: true,
default: () => nanoid(),
index: { unique: true },
},
productName: { type: String, ref: productSchema },
productAmount: Number,
},
],
}
型
正如你所看到的,mealSchema中的products数组与Product[]几乎相同,只是多了一个productAmount属性。
前端的逻辑是,当你创建一个新的Meal时,你可以添加尽可能多的产品(从产品列表中选择(从数据库中检索)或创建新的)。然后整个Meal被发送到后端,Meal在MongoDB集合中创建,之后,BE也会遍历每个产品,如果它不存在于'products'集合中,它也会被添加到那里。
我遇到了一个问题,当我试图创建一个Meal并添加一个已经存在于“products”集合中的Product时,后端返回一个错误:
{
"error": "Could not create meal",
"message": "E11000 duplicate key error collection: test.meals index: products.uniqueId_1 dup key: { products.uniqueId: \"ukmLU8nDtIXaBA7OzZD6R\" }"
}
型
有人能帮我解决这个问题吗?
2条答案
按热度按时间yeotifhr1#
E11000错误是由mongod服务器生成的。该错误意味着服务器拒绝创建文档,因为它会导致在使用选项“unique:true”显式创建的索引中出现重复键。
错误消息指出,“test.meals”集合中名为“products.uniqueId_1”的索引具有唯一选项,并且正在插入的文档包含
{ products.uniqueId: "ukmLU8nDtIXaBA7OzZD6R" }
,但该值已存在于另一个文档中。您是否打算限制该集合,以便只有一个文档可以引用相同的“products.uniqueId”值
mccptt672#
这是膳食控制器:
字符串
产品控制器:
型