Express会话存储:MongoError:_id上的E11000重复键错误集合

时间:2017-06-12 10:05:35

标签: node.js mongodb mongoose

我正在使用sessionstore npm模块将会话数据存储在数据库中。

var session = require('express-session');
var sessionstore = require('sessionstore');

app.use(session({
  secret:appConfig.JWT_SECRET,
  resave:false,
  saveUninitialized:true,
  store: sessionstore.createSessionStore({
      type: 'mongodb',
      host: 'localhost',
      port: 27017,
      dbName: 'MyDatabase',
      collectionName: 'sessions',
      timeout: 10000
  }),
  cookie: {
         maxAge: 1000 * 60 * 60 // Milliseconds (3600000ms -> 60min)
     }
}));

我收到此错误:

MongoError: E11000 duplicate key error collection: myDatabase.sessions index: _id_ dup key: { : "Lz4SJIHaBfGFfNg3_ChNTkFnwKBLQDUN" }
    at Function.MongoError.create (/home/user/public_html/projectName/server/node_modules/mongodb-core/lib/error.js:31:11)
    at toError (/home/user/public_html/projectName/server/node_modules/mongodb/lib/utils.js:139:22)
    at /home/user/public_html/projectName/server/node_modules/mongodb/lib/collection.js:1060:67
    at /home/user/public_html/projectName/server/node_modules/mongodb-core/lib/connection/pool.js:461:18
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickDomainCallback (internal/process/next_tick.js:128:9)

如何阻止创建具有相同ID的文档。我也没有在我的项目中使用Mongoose。可以做什么,因为这不会使服务器崩溃,但会关闭与数据库的所有连接,并且用户无法登录(或者没有api响应)。

我也在SO和github上检查了一些类似的问题,但它们都指向猫鼬或改名字段名称,但在我的情况下没有这样的事情。

请帮忙。

1 个答案:

答案 0 :(得分:0)

只是不要指定ID,Mongo会自动为其分配一个未使用的ID。

请参阅db.collection.insert documentation,此摘录来自id section

  

如果文档未指定_id字段,则MongoDB将添加   _id字段,之前为文档指定唯一的ObjectId   插入。大多数驱动程序创建ObjectId并插入_id字段,   但是mongod会创建并填充_id,如果驱动程序或   申请没有。

     

如果文档包含_id字段,则_id值必须是唯一的   在集合中,以避免重复键错误。