使用类似join的查询,工作在16M左右



给定下面的体系结构,是否有一种方法可以根据可搜索列查询人员集合并返回这样的对象?

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格式。

我能够解决大小限制。使用"期望的结构",我将预期的文档拆分为大小在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' )
        ))
    ));