0

目前,我正在管理一组包含许多成员的列表。当涉及到字段和这些字段的命名时,每个列表看起来都不同。

通常,基本列表成员可能如下所示(来自我的成员集合):

{
    "_id" : ObjectId("52284ae408edcb146200009f"),
    "list_id" : 1,
    "status" : "active",
    "imported" : 1,
    "fields" : {
        "firstname" : "John",
        "lastname" : "Doe",
        "email" : "john@example.com",
        "birthdate" : ISODate("1977-09-03T23:08:20.000Z"),
        "favorite_color" : "Green",
        "interests" : [ 
            {
                "id" : 8,
                "value" : "Books"
            }, 
            {
                "id" : 10,
                "value" : "Travel"
            }, 
            {
                "id" : 12,
                "value" : "Cooking"
            }, 
            {
                "id" : 15,
                "value" : "Wellnes"
            }
        ]
    },
    "created_at" : ISODate("2012-05-06T15:12:26.000Z"),
    "updated_at" : ISODate("2012-05-06T15:12:26.000Z")
}

“字段”索引下的所有字段都是当前列表 ID 唯一的字段 - 这些字段可以针对每个列表 ID 更改,这意味着新列表可能如下所示:

{
    "_id" : ObjectId("52284ae408edcb146200009f"),
    "list_id" : 2,
    "status" : "active",
    "imported" : 1,
    "fields" : {
        "fullname" : "John Doe",
        "email" : "john@example.com",
        "cell" : 123456787984
    },
    "created_at" : ISODate("2012-05-06T15:12:26.000Z"),
    "updated_at" : ISODate("2012-05-06T15:12:26.000Z")
}

目前,我的应用程序允许用户在每个海关字段中进行动态搜索,但由于它们没有索引,因此这个过程可能非常缓慢。

我不认为允许列表创建者选择应该索引哪些字段是一个选项 - 但我真的需要加快速度。

有什么解决办法吗?

4

1 回答 1

0

如果您以具有字段数组的方式重构文档,则可以利用索引。

fields: [
    { name: 'fullName', value: 'John Doe' },
    { name: 'email', value: 'john@example.com' },
    ...
]

在 fields.name 和 fields.value 上创建索引。

当然,这不是像您的兴趣列表这样的“更深层”价值观的解决方案。

于 2013-11-14T22:20:16.193 回答