【问题标题】:How to use nested Mongodb query to fetch data from a collection如何使用嵌套的 Mongodb 查询从集合中获取数据
【发布时间】:2016-06-03 13:27:53
【问题描述】:

我是编写 MongoDb 查询以获取数据的新手。我正在尝试编写一个嵌套查询来从会话集合中获取用户数据。

基本上我想得到db.sessions.passport.user.email。 但我无法获得所需的值,即vdipali8@gmail.com

我使用的查询如下:

db.sessions.find({"session.passport.user.email":"vdipali8@gmail" });

以下是我的会话集:

db.sessions.find().pretty()

{
        "_id" : "xi8sMgfYywLJdoZPpUHKa3Uau3wY",
        "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":{\"_id\":\"5750ec592ecb2c0bfb5d39\",\"email\":\"vdipali8@gmail.com\",\"lastName\":\"Vl\",\"firstName\":\"Dipali\",\"facebookid\":\"13596511\",\"__v\":0}}}",
        "expires" : ISODate("2016-06-17T02:47:45.042Z")
}

会话集合在我的 express Node 服务器文件中生成如下:

app.use(session({ secret: 'keyboard cat', 
    store: new MongoStore({ 
            mongooseConnection: mongoose.connection,
            collection: 'sessions'
        }) 
}));

其架构声明如下:

var SessionSchema = new Schema({
        session: String,
        expires: String
        }, {collection: 'sessions'}
    );

是的,我正在尝试检索“电子邮件”以及其他几个字段。

【问题讨论】:

  • 您是否尝试过中断查找查询?喜欢db.sessions.find({"session.passport})db.sessions.find({"session.passport.user})。看看你是否得到了这些查询的结果。
  • @titi23:我试过了,但没有看到任何结果。我在查询“_id”时看到的唯一结果:“xi8sMgfYywLJdoZPpUHKa3Uau3wY”。
  • 字符串从何而来?所有文档的“会话”字段值格式是否相同?您想检索所有文档的“电子邮件”吗?请使用edit link 使用这些信息更新您的问题

标签: mongodb mongodb-query


【解决方案1】:

不可能, 你的查询是正确的,但session field is STRING 所以你不能在 STRING 字段的 mongodb 中使用点运算符。 请将对象放在会话字段中,然后它将起作用。

喜欢这个

{
    "_id": "xi8sMgfYywLJdoZPpUHKa3Uau3wY",
    "session": {
        "cookie": {
            "originalMaxAge": null,
            "expires": null,
            "httpOnly": true,
            "path": ""
        },
        "passport": {
            "user": {
                "_id": "5750ec592ecb2c0bfb5d39",
                "email": "vdipali8@gmail.com",
                "lastName": "Vl",
                "firstName": "Dipali",
                "facebookid": "13596511",
                "__v": 0
            }
        }
    },
    "expires": ISODate("2016-06-17T02:47:45.042Z")

}

【讨论】:

  • 感谢您的回答。我是为 Mongodb 编写查询的新手。我不太确定“将对象放入会话字段”是什么意思?
  • 我改变了答案,见上文
  • 以下查询给了我结果:db.sessions.find({"session":/passport/});
  • 我在上面编辑了我的评论。但我需要编写一个查询,它只检索电子邮件 ID 值而不是整个文档。
猜你喜欢
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 2018-03-06
相关资源
最近更新 更多