通过类似连接的查询来处理16M左右的限制

时间:2014-07-02 15:09:23

标签: mongodb mongodb-query mongodb-php

鉴于下面的架构,有没有办法可以根据可搜索的列查询人员集合并找回这样的对象?

organization with people: {
    _id: "13efdsf31r23rwes"
    name: "Name",
    wp_slug: "/wordpress-slug/",
    type: "Cemetary",
    file_name: "something.csv",
    columns: [
        { label: "Maiden Name", name: "maiden_name", hidden: false },
        { label: "First Name", name: "first_name", hidden: false },
        { label: "First Pet", name: "first_pet", hidden: true },
    ],
    people: [
        { 
            _id: "13okekdsf12313", 
            "organization_id": 13efdsf31r23rwes,
            "maiden_name": "Gilomen",
            "surname": "Black", 
            "first_name": "Maria", 
            "first_pet": "Bud the Dog",
            "searchable_columns": {
                "surname": ["Black", "Gilomen"],
                "given": ["Maria"],
            }
        },
        { 
            _id: "1231sdf1313ewfd", 
            "organization_id": 13efdsf31r23rwes,
            "maiden_name": "Portland",
            "surname": "Smith", 
            "first_name": "Rose", 
            "first_pet": "Max the Dog",
            "searchable_columns": {
                "surname": ["Smith", "Portland"],
                "given": ["Rose"],
            }
        },
        ]
}

当前架构:

organization document example: {
    _id: "13efdsf31r23rwes"
    name: "Name",
    wp_slug: "/wordpress-slug/",
    type: "Cemetary",
    file_name: "something.csv",
    columns: [
        { label: "Maiden Name", name: "maiden_name", hidden: false },
        { label: "First Name", name: "first_name", hidden: false },
        { label: "First Pet", name: "first_pet", hidden: true },
    ],
}

people collection: [
    { 
        _id: "13okekdsf12313", 
        "organization_id": 13efdsf31r23rwes,
        "maiden_name": "Gilomen",
        "surname": "Black", 
        "first_name": "Maria", 
        "first_pet": "Bud the Dog",
        "searchable_columns": {
            "surname": ["Black", "Gilomen"],
            "given": ["Maria"],
        }
    },
    { 
        _id: "1231sdf1313ewfd", 
        "organization_id": 13efdsf31r23rwes,
        "maiden_name": "Portland",
        "surname": "Smith", 
        "first_name": "Rose", 
        "first_pet": "Max the Dog",
        "searchable_columns": {
            "surname": ["Smith", "Portland"],
            "given": ["Rose"],
        }
    },
]

不幸的是,当它们作为组合文档存储时,我们已达到16M文档限制,因此我需要执行此解决方法。这可能与直接的MongoDB查询有关,还是除了查询两次之外别无他法?大约有500万人和500多个组织的记录。任何帮助将不胜感激,特别是如果以MongoPHP格式显示。

1 个答案:

答案 0 :(得分:0)

我能够解决尺寸限制问题。使用“所需结构”,我将目标文档拆分为16M以下大小的多个文档。使用聚合查询,我能够将所有拆分组合在一起。

$documents_with_results = $db->organization_data->aggregate(array(
        array( '$match' => $search_column_query),
        array( '$unwind' => '$p' ),
        array( '$match' => $search_column_query),
        array( '$group' => array(
            '_id' => '$_id',
            'name' => array( '$first' => '$n' ),
            'slug' => array( '$first' => '$ws' ),
            'people' => array( '$push' => '$p' )
        ))
    ));