如何使用查询从mongodb中获取嵌入数据?

时间:2015-05-27 07:52:07

标签: mongodb

我在身份验证令牌架构中嵌入了用户数据,我想根据用户名/电子邮件获取令牌。

我的json在数据库中是:

{
    "_id" : ObjectId("556573e744ae59c06a45533e"),
    "_class" : "com.samepinch.domain.user.AuthenticationToken",
    "token" : "c19f368e-8734-4a17-970e-e60e77dd955b",
    "user" : {
        "_id" : ObjectId("556566ca44ae69d5428778c5"),
        "age" : 0,
        "username" : "qsiddiqui81@yahoo.com",
        "firstName" : "Qasim",
        "lastName" : "Siddiqui",
        "email" : "qsiddiqui81@yahoo.com",
        "gender" : "male",
        "createdDate" : ISODate("2015-05-27T06:40:10.871Z"),
        "updatedDate" : ISODate("2015-05-27T06:40:10.871Z")
    }
}

2 个答案:

答案 0 :(得分:1)

如果您只想将令牌作为输出,则应通过匹配条件将其添加到投影中。 您想要在username对象中匹配emailuser  您可以使用以下查询:

db.collection.find({
    "user.username": "qsiddiqui81@yahoo.com",
    "user.email": "qsiddiqui81@yahoo.com"
  }, {
    "token": 1
})

如果您想与username对象中的emailuser匹配,可以使用

db.collection.find({
$or: [{
        "user.username": "qsiddiqui81@yahoo.com"
       }, {
        "user.email": "qsiddiqui81@yahoo.com"
     }]
    }, {
    "token": 1
})

答案 1 :(得分:0)

如果我理解正确,你可以这样做:

collection.find_one({"user.username": "qsiddiqui81@yahoo.com",
                     "user.email":"qsiddiqui81@yahoo.com"},
                    {"token": 1, "_id": 0})
{"token": "c19f368e-8734-4a17-970e-e60e77dd955b"}

我习惯通过pymongo(python接口)查询它,所以你可能需要稍微更改一下查询。

您需要知道的是查询子文档的点符号