查询MongoDB嵌套字段

时间:2016-11-18 19:45:08

标签: node.js mongodb session express mongoose

修改

我现在意识到会话文档的FIELD为session,其他所有内容都为VALUE。所以cookie: { passport: { user:... } } }不是嵌套对象,它们只是一个大字符串。

所以现在我可以使用$ regex查询来查找我需要的内容:

Session.find({
    'session': {$regex : ".*jane@gmail.com.*"}
  }, function(error, session){

=========原始问题==========

我正在使用connect-mongo将用户的会话保存到MongoDB,我想查询session集合以查明用户是否有活动会话。

用户名存储在sessions.cookie.passport.user下的集合中,但我的查询将返回空白。

这是一个示例会话文档:

{
    "_id": "orxJPolqKQ11rZdYhTKMuS90G-zDrrKk",
    "session":
    "{
      \"cookie\":{
        \"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},
        \"flash\":{},
        \"passport\":{
          \"user\":\"jane@email.com\"   // <- This is what I want!
        }                                // ... More info here... 

到目前为止我尝试过的查询:

Session.find({
    "session.cookie.passport.user": "jane@gmail.com"
  }, function(error, session){

Session.find({
    "session.cookie.passport": {"user": "jane@gmail.com"}
  }, function(error, session){

Session.find({
    session: {
      cookie: {
        passport: {
          user: "jane@gmail.com"
        }
      }
    }
  }, function(error, session){

Session.find({
    "session": {
      "cookie": {
        "passport": {
          "user": "jane@gmail.com"
        }
      }
    }
  }, function(error, session){

然后我尝试了更简单的查询来逐步构建它们(下一个返回所有文档):

Session.find({
    "session": {$exists: true}
  }, function(error, session){

然后这个文件返回零:

Session.find({
    "session.cookie": {$exists: true}
  }, function(error, session){

如何查询数据库以按给定用户名检索会话?

谢谢!

1 个答案:

答案 0 :(得分:1)

我会尝试

Session.find({
    "session.cookie.passport.user": "jane@gmail.com"
  }, function(error, session){