在MongoDB中存储可搜索值的数组

时间:2012-07-04 13:28:08

标签: mongodb database-design

我需要在我的Users集合中的每个文档中存储角色ID和角色名称。我需要能够说“获取具有xyz角色的用户”或“获取具有名称包含'XYZ'的角色的用户”,这样的话。

在Mongo中甚至可以吗?

现在,我正在存储这样的数据:

{
    "_id": {
        "$id": "4fe30e3db92f5d2a5c000000"
    },
    "alias": "rogue_coder",
    "display_name": "Rogue Coder",
    "email": "rogue@example.com",
    "roles": {
        "4fe30e5fb92f5d6f53000000": "Super Administrator"
    }
}

有了这个,我可以看到一个用户是否有一个给定的角色,但我无法让所有角色都包含“超级”的用户。关于如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:1)

MongoDB支持正则表达式以匹配键的值。

看看这个MongoDB Regular Expression

答案 1 :(得分:1)

不确定,但你可能会尝试这样的

db.collection.find( { roles: { /super.*/i } );

答案 2 :(得分:1)

根据您的尝试,您可能需要存储role_id& role_name在单独的数组中,如下所示:

{
    "_id": {
        "$id": "4fe30e3db92f5d2a5c000000"
    },
    "alias": "rogue_coder",
    "display_name": "Rogue Coder",
    "email": "rogue@example.com",
    "role_names": [
        "Super Administrator"
    ],
    "role_ids" : [
        "4fe30e5fb92f5d6f53000000"
    ]
}