2016-06-25 20 views
0

My MongoDBには、モジュールによって作成されたsessionsコレクションがあります。 Mongooseによって作成されたものではないので、コレクションにはモデルや何もありません。モンゴース削除モデルから除外する

モデルを指定せずにこのコレクションにアクセスするにはどうすればよいですか?

私は次のことを試してみました:

mongoose.connection.db.sessions.remove({'session.userId': userId}, function(e, found) { 
    console.log(found); 
    res.json({success: true}); 
}); 

私はのエラー受信が:直接コレクションを照会Cannot read property 'remove' of undefined

+0

可能な複製http://stackoverflow.com/a/10519504/3284355正解の編集を参照してください。既にインストールされているので、mongoネイティブドライバパッケージを使用することができます – Molda

答えて

1

が唯一の問題の一部を解決します。

外観からは、express-sessionconnect-mongoを使用してセッションを管理しています。これは、データベース内のJSON 文字列として(req.session)セッションデータを格納します:

{ 
    "_id": "fLBj_McMFM-7PwVNsv9ov88vOAgoNiDa", 
    "session": "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"userId\":\"my-user-id\"}", 
    "expires": ISODate("2016-07-09T08:47:38.156Z") 
} 

あなたが見ることができるように、sessionが文字列ではなくオブジェクトであるので、あなたはsession.userIdを使用して、それを直接照会することはできません。 。

あなたがreq.session.destroy()を使用できない場合は、JSON文字列にユーザーIDと照合する正規表現のクエリを実行する必要があります。

let collection = mongoose.connection.db.collection('sessions'); 
let query  = new RegExp(`"userId":"${userId}"`); 
collection.remove({ session : query }, function(e, found) { 
    console.log(found); 
    res.json({success: true}); 
}); 

userIdescape-string-regexpのようなものを通じて最初の実行であればそれはおそらく最善です特殊文字が正しくエスケープされていることを確認してください。

特に、データベースに多数のセッションがある場合、これは高速なクエリではありません。

EDIT:私はちょうど、falseに設定されている場合、MongoDBのに通常のオブジェクトとしてではなく、JSON文字列としてセッションデータを書き込む必要がありconnect-mongoためstringifyオプションを発見しました。

+0

あなたは正しいと仮定しています。私はセッションを管理するために 'connect-mongo'で' express-session'を使っています。私のログアウトAPIの 'POST'では、これらのセッションを破壊する必要があります。私は自分のAPIの中で 'req.session = null'を呼び出し、セッション設定で' unset: 'destroy''を設定することでそうすることができました。しかし、小さな問題が1つあります。 'req.session.userId'が未定義でない場合、私のホームページ(' app.get( '/'、...) ')は別のページを提供します。何らかの理由で、ログアウトAPIが呼び出された後、ページを2回更新する必要があります。 – Fizzix

+0

@Fizzixは、セッションキーに属するセッションがログアウトルートへのリクエスト後に削除された場合、データベースをチェックインできますか?あるいは、おそらく 'req.session.destroy()'がうまくいくのでしょうか? – robertklep

関連する問題