Node.js Can';不能向MongoDB集合添加多个对象

Node.js Can';不能向MongoDB集合添加多个对象,node.js,json,mongodb,mongoose,Node.js,Json,Mongodb,Mongoose,伙计们,我正在构建我的NodeJSAPI,为此,我将通过mongoose模块使用MongoDB 我创建了模式、控制器,所有端点都可以工作,但我只能创建第一篇文章。我的意思是,我可以在MongoDB的集合中创建一个对象,在创建之后,如果我尝试向数据库中添加任何其他内容,我会得到一个MongoError,我不知道该做什么,也没有在internet上找到任何内容 我希望你能帮我 这是模式: const mongoose=require('mongoose'); const ProjectSchema=

伙计们,我正在构建我的NodeJSAPI,为此,我将通过mongoose模块使用MongoDB

我创建了模式、控制器,所有端点都可以工作,但我只能创建第一篇文章。我的意思是,我可以在MongoDB的集合中创建一个对象,在创建之后,如果我尝试向数据库中添加任何其他内容,我会得到一个MongoError,我不知道该做什么,也没有在internet上找到任何内容

我希望你能帮我

这是模式:

const mongoose=require('mongoose');
const ProjectSchema=新的mongoose.Schema({
姓名:{
类型:字符串,
要求:正确,
独一无二:真的
},
说明:{
类型:字符串,
必填项:true
},
应用程序:{
类型:字符串,
必填项:false,
},
github:{
类型:字符串,
必填项:false,
},
标志:{
类型:字符串,
必填项:false
}
});
const Project=mongoose.model('Project',ProjectSchema);
module.exports=项目;
控制器:

const Project=require(“../models/ProjectSchema”);
类项目控制器{
异步addNewProject(请求、恢复){
试一试{
const data=wait Project.create(请求主体);
返回res.send(数据);
}捕获(错误){
返回res.send(错误);
}
}
异步列表所有项目(req、res){
试一试{
const data=wait Project.find({});
返回res.send(数据);
}捕获(错误){
返回res.send(错误);
}
}
}
module.exports=新的ProjectController();
请求后JSON:

{
“名称”:“名称”,
“说明”:“说明”,
“应用程序”:“应用程序”,
“github”:“github”,
“logo”:“logo”
}
将数据添加到数据库时,my API的预期响应是数据本身,如下所示: 答复:

{
“_id”:“603ac9d621540e1748b5d21f”,
“名称”:“名称”,
“说明”:“说明”,
“应用程序”:“应用程序”,
“github”:“github”,
“logo”:“logo”,
“_v”:0
}
在第一次POST请求时,它确实发生了。但在那之后,我得到的是:

{
“司机”:没错,
“名称”:“MongoError”,
“索引”:0,
“代码”:11000,
“按键模式”:{
“id”:1
},
“键值”:{
“id”:空
}
}
注:我已经尝试过猫鼬的旧版本,但我得到了同样的东西。。。像猫鼬5.11.15,5.11.17,目前最新的5.11.18

提前谢谢

编辑:

未捕获的错误:

(node:1500) UnhandledPromiseRejectionWarning: MongoError: E11000 duplicate key error collection: GithubProjects.projects index: id_1 dup key: { id: null }
    at Function.create (C:\Users\joaov\Desktop\ms-sapi-getRepos\node_modules\mongodb\lib\core\error.js:57:12)
    at toError (C:\Users\joaov\Desktop\ms-sapi-getRepos\node_modules\mongodb\lib\utils.js:123:22)
    at C:\Users\joaov\Desktop\ms-sapi-getRepos\node_modules\mongodb\lib\operations\common_functions.js:258:39
    at handler (C:\Users\joaov\Desktop\ms-sapi-getRepos\node_modules\mongodb\lib\core\sdam\topology.js:943:24)
    at C:\Users\joaov\Desktop\ms-sapi-getRepos\node_modules\mongodb\lib\cmap\connection_pool.js:350:13
    at handleOperationResult (C:\Users\joaov\Desktop\ms-sapi-getRepos\node_modules\mongodb\lib\core\sdam\server.js:558:5)
    at MessageStream.messageHandler (C:\Users\joaov\Desktop\ms-sapi-getRepos\node_modules\mongodb\lib\cmap\connection.js:277:5)
    at MessageStream.emit (events.js:315:20)
    at processIncomingData (C:\Users\joaov\Desktop\ms-sapi-getRepos\node_modules\mongodb\lib\cmap\message_stream.js:144:12)
    at MessageStream._write (C:\Users\joaov\Desktop\ms-sapi-getRepos\node_modules\mongodb\lib\cmap\message_stream.js:42:5)
    at writeOrBuffer (internal/streams/writable.js:358:12)
    at MessageStream.Writable.write (internal/streams/writable.js:303:10)
    at TLSSocket.ondata (internal/streams/readable.js:719:22)
    at TLSSocket.emit (events.js:315:20)
    at addChunk (internal/streams/readable.js:309:12)
    at readableAddChunk (internal/streams/readable.js:284:9)
(node:1500) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:1500) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.```
删除唯一索引“id_1”,例如从mongo shell中删除:

db.projects.dropIndex("id_1")
您的模式中没有“id”字段,因此mongoose插入不带“id”的文档。Mongo默认为“null”,它适用于第一个文档。插入第二个时,它违反了唯一约束

我猜你创建索引是偶然的,删除它是安全的。否则,您需要更改架构和应用程序逻辑以向id字段提供唯一值。

删除唯一索引“id_1”,例如从mongo shell:

db.projects.dropIndex("id_1")
您的模式中没有“id”字段,因此mongoose插入不带“id”的文档。Mongo默认为“null”,它适用于第一个文档。插入第二个时,它违反了唯一约束


我猜你创建索引是偶然的,删除它是安全的。否则,您需要更改架构和应用程序逻辑,以便为id字段提供唯一的值。

能否提供包括堆栈跟踪在内的完整错误?堆栈跟踪是什么?这是我得到的所有响应。尝试将数据插入数据库后,控制台中不会显示任何错误。控制台中不会出现错误,因为您捕获了错误并在响应中返回剥离版本。暂时仅用于调试目的:不要捕获或重新抛出以获取完整的错误对象。能否提供包含堆栈跟踪的完整错误?堆栈跟踪是什么?这是我得到的所有响应。尝试将数据插入数据库后,控制台中不会显示任何错误。控制台中不会出现错误,因为您捕获了错误并在响应中返回剥离版本。暂时仅用于调试目的:不要捕获或重新抛出以获取完整的错误对象。事实上,我昨天确实创建了属性“id”,但到底发生了什么?比如,我从我的mongoose模式中删除了它,为什么它仍然被读取?因为索引仍然在MongoDB端。删除字段时未删除索引。它是唯一索引,意味着所有文档在此字段中必须具有不同的值。没有字段会为了索引而生成空值。哦,我明白了。。。你解决了我的问题,谢谢你+1事实上,我昨天确实创建了属性“id”,但到底发生了什么?比如,我从我的mongoose模式中删除了它,为什么它仍然被读取?因为索引仍然在MongoDB端。删除字段时未删除索引。它是唯一索引,意味着所有文档在此字段中必须具有不同的值。没有字段会为了索引而生成空值。哦,我明白了。。。你解决了我的问题,谢谢你+1.