简体   繁体   中英

Find substring in MongoDB array from another array from PHP

I have a more complex document "schema" saved in Mongo but the part that I need to match looks like this

"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"
    }
}

I am using PHP to query the Mongo database and I have to query each document against an array of possible words.

array(
    'boxing',
    'warrior'
)

I don't know how to write the code in order to try to match the array that I have with the dataset saved in Mongo. For now I only try to see if the tag is within the array of words

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

I've resolved this problem by first creating an array that uses MongoRegex to search through the tags and by adding this array to the $or procedure

        $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'
            )
        );

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM