直接查詢集合將只解決你的問題的一部分。
從外觀上看,您使用express-session
和connect-mongo
來管理會話。這將會話數據(req.session
)串存儲爲JSON在數據庫:
{
"_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});
});
它可能是最好的,如果userId
是通過類似escape-string-regexp
第一次運行以確保任何特殊字符都能正確轉義。
請注意,這不是一個快速查詢,特別是如果您的數據庫中有很多會話。
編輯:我剛剛發現了stringify
選項connect-mongo
,如果設置爲false
,應該寫會話數據作爲常規對象的MongoDB,而不是作爲一個JSON字符串。
可能的重複http://stackoverflow.com/a/10519504/3284355請參閱編輯正確的答案。您可以使用mongo本機驅動程序包,因爲它已經安裝了 – Molda