2017-06-12 28 views
1

セッションデータをデータベースに格納するためにsessionstore npmモジュールを使用しています。Expressセッションストア:MongoError:_idのE11000重複キーエラーコレクション

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についても同様の質問をしますが、それらはすべてmongooseまたはフィールド名の変更を指していますが、私の場合はそのようなものはありません。

助けてください。

+0

はバグのように見えます。 '_id'以外のキーに使用する別のフィールドを設定しようとしましたか?何かを変更する前に、コレクションの内容を消去する必要があります。 –

+0

'db.sessions.drop()'は動作しますか? (これより、古い問題:https://github.com/jdesboeufs/connect-mongo/issues/78) – Lissy

+0

私は他のキーを追加していません。私はユーザー名と電子メールアドレスを保存しているデータオブジェクトです –

答えて

0

IDを指定しないだけで、Mongoは未使用のIDを自動的に割り当てます。

db.collection.insert documentationを参照してください、この抽出物はid sectionからだった:

If the document does not specify an _id field, then MongoDB will add the _id field and assign a unique ObjectId for the document before inserting. Most drivers create an ObjectId and insert the _id field, but the mongod will create and populate the _id if the driver or application does not.

If the document contains an _id field, the _id value must be unique within the collection to avoid duplicate key error.

+0

質問をお読みください。これはOPのコードではなく、ミドルウェアのプラグインによって行われています。 Googleはこの質問に答えることができませんでした。 –

+1

私は_idを追加していません。 –

関連する問題