从PHP的另一个数组中查找MongoDB数组中的子字符串

时间:2013-12-20 11:38:15

标签: php regex arrays mongodb find

我在Mongo中保存了一个更复杂的文档“schema”,但我需要匹配的部分看起来像这样

"tags" : [
    {
        "tag" : "accompong maroon festival",
        "type" : "label"
    },
    {
        "tag" : "jamaica",
        "type" : "label"
    },
    {
        "tag" : "maroon warrior",
        "type" : "label"
    },
    {
        "tag" : "maroons",
        "type" : "label"
    },
    {
        "tag" : "caribbean culture",
        "type" : "label"
    },
    {
        "tag" : "rum",
        "type" : "label"
    }
}

我使用PHP查询Mongo数据库,我必须根据可能的单词数组查询每个文档。

array(
    'boxing',
    'warrior'
)

我不知道如何编写代码以便尝试将我拥有的数组与Mongo中保存的数据集进行匹配。 现在我只是试着看看标签是否在单词数组

$data = $this->event_model->find_by(
            array
            (
                'tags.tag' => array
                (
                    '$in' => $Words
                ),
                'published' => 'y'
            )
        );

1 个答案:

答案 0 :(得分:0)

我通过首先创建一个使用MongoRegex搜索标记并将此数组添加到$或过程

的数组来解决这个问题
        $or_array = array();
        foreach($Words as $w)
        {
            $or_array[] = array(
                'tags.tag' => new MongoRegex('/.*'. $w .'.*/i')
            );
        }

        $data = $this->event_model->find_by(
            array
            (
                '$or' => $or_array,
                'published' => 'y'
            )
        );