如何根据mongodb集合中的会话查找活动用户列表

时间:2015-03-29 13:10:16

标签: node.js mongodb session

我有一个用户ID列表,我需要通过传递用户ID列表从会话集合中的列表中找到活动用户。会话集合如下所示:这是使用express js会话处理程序自动创建的。

{
    "_id" : "sXfI3vMxkZzsTkxuovUFONYA",
    "session" : "{\"cookie\":{\"originalMaxAge\":14399998,\"expires\":\"2015-03-28T17:24:18.996Z\",\"secure\":true,\"httpOnly\":true,\"path\":\"/\"},\"lastAccess\":1427549058996,\"dbname\":\"abc\",\"userid\":\"54f5bfb0336a15084785c379\"}",
    "expires" : 1427563458000
}
{
    "_id" : "sXfI3vMxkZzsTkxuovUFONYB",
    "session" : "{\"cookie\":{\"originalMaxAge\":14399998,\"expires\":\"2015-03-28T17:24:18.996Z\",\"secure\":true,\"httpOnly\":true,\"path\":\"/\"},\"lastAccess\":1427549058996,\"dbname\":\"abc\",\"userid\":\"54f5bfb0336a15084785c371\"}",
    "expires" : 1427563458000
}
{
    "_id" : "sXfI3vMxkZzsTkxuovUFONYC",
    "session" : "{\"cookie\":{\"originalMaxAge\":14399998,\"expires\":\"2015-03-28T17:24:18.996Z\",\"secure\":true,\"httpOnly\":true,\"path\":\"/\"},\"lastAccess\":1427549058996,\"dbname\":\"abc\",\"userid\":\"54f5bfb0336a15084785c370\"}",
    "expires" : 1427563458000
}

我有["54f5bfb0336a15084785c379","54f5bfb0336a15084785c371"]的用户ID列表"userList"。 我这样查询:

db.sessions.find({"session.cookie.userid":{$in:userList}})`

我的结果是null

我可以像这样查询时得到结果:

db.sessions.find({"session":/54f5bfb0336a15084785c379/})

但我需要使用node js mongodb client从用户列表中找到活动用户列表。有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:1)

首先,您应该了解什么是 JSON 。根据你的数据,mongo永远不会找到session.cookie.userid,因为session是关键,而冒号之后它是给定键的值。所以你应该把你的JSON变成下面的

    [{
    "_id": "sXfI3vMxkZzsTkxuovUFONYA",
    "session": {
        "cookie": {
            "originalMaxAge": 14399998,
            "expires": "2015-03-28T17:24:18.996Z",
            "secure": true,
            "httpOnly": true,
            "path": "/"
        },
        "lastAccess": 1427549058996,
        "dbname": "abc",
        "userid": "54f5bfb0336a15084785c379"
    },
    "expires": 1427563458000
    },
    {
    "_id": "sXfI3vMxkZzsTkxuovUFONYB",
    "session": {
        "cookie": {
            "originalMaxAge": 14399998,
            "expires": "2015-03-28T17:24:18.996Z",
            "secure": true,
            "httpOnly": true,
            "path": "/"
        },
        "lastAccess": 1427549058996,
        "dbname": "abc",
        "userid": "54f5bfb0336a15084785c371"
    },
    "expires": 1427563458000
    },
    {
    "_id": "sXfI3vMxkZzsTkxuovUFONYC",
    "session": {
        "cookie": {
            "originalMaxAge": 14399998,
            "expires": "2015-03-28T17:24:18.996Z",
            "secure": true,
            "httpOnly": true,
            "path": "/"
        },
        "lastAccess": 1427549058996,
        "dbname": "abc",
        "userid": "54f5bfb0336a15084785c370"
    },
    "expires": 1427563458000
    }]

如果您在集合中插入上述文档,则使用简单的后续查询,该查询将返回您期望的结果。

db.collectionName.find({"session.userid":
                     {"$in":["54f5bfb0336a15084785c379","54f5bfb0336a15084785c371"]}}
                     ).pretty()

答案 1 :(得分:-1)

我认为你的会话对象是错误的。不要使用黑色斜杠只是双引号而不是在内部使用单引号,因为你在外面使用双引号" session" :" {' cookie':{' originalMaxAge':14399998,' expires':' 2015-03-28T17:24:18.996Z& #39;'安全':真,'仅Http':真,'路径':' / \'}&#39 ; LASTACCESS':1427549058996,' DBNAME':' ABC''用户ID':' 54f5bfb0336a15084785c379'}"