【问题标题】:Storing an array of searchable values in MongoDB在 MongoDB 中存储可搜索值的数组
【发布时间】:2012-07-05 02:38:28
【问题描述】:

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

这在 Mongo 中是否可行?

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

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

这样,我可以查看用户是否具有给定的角色,但我无法获取所有具有包含“超级”一词的角色的用户。关于如何做到这一点的任何想法?

【问题讨论】:

    标签: mongodb database-design


    【解决方案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"
        ]
    }
    

    【讨论】:

      【解决方案2】:

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

      看看这个MongoDB Regular Expression

      【讨论】:

        【解决方案3】:

        不确定,但你可以尝试一下这样的

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-13
          • 2019-08-03
          • 2012-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多