В запросе mongoDB с lumen: $ или / $ и / $ ни записи должны быть полными объектами - PullRequest
0 голосов
/ 15 ноября 2018

В моем MongoDB я сохранил значение, как показано ниже,

{ 
    "_id" : ObjectId("5bed3f5019f0431be000412b"), 
    "reference" : "SL2PR01MB2745E4160158C08C4B7A367285C30@SL2PR01MB2745.apcprd01.prod.exchangelabs.com,SL2PR01MB274333160158C08C4B7A367285C30@SL2PR01MB2745.apcprd01.prod.exchangelabs.com", 
    "email_thread_id" : NumberInt(5)
}
{ 
    "_id" : ObjectId("5bed3f5019f0431be000412b"), 
    "reference" : "SL2PR01MB2745E4160158C08C4B7A364444C30@SL2PR01MB2745.apcprd01.prod.exchangelabs.com", 
    "email_thread_id" : NumberInt(6)
}

Мое ключевое слово поиска:

"SL2PR01MB2745E4160158C08C4B7A364444C30@SL2PR01MB2745.apcprd01.prod.exchangelabs.com"

Что соответствует второму массиву извыше JSON.

Это мой запрос,

$referanceId= "SL2PR01MB2745E4160158C08C4B7A364444C30@SL2PR01MB2745.apcprd01.prod.exchangelabs.com";
$mailExists = DB::connection('mongodb')->collection('email_message')
            ->select('email_thread_id');            
            if ($referanceId) {
                $mailExists->whereRaw("find_in_set(".$referanceId.", reference)");
            }
$query = $mailExists->first();

Но он выдает ошибку, как показано ниже:

ServerException в строке Find.php 299:
$ или / $ и / $ ни записи должны быть полными объектами

Пожалуйста, помогите мне решить эту проблему.Спасибо.

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете сделать это проще с помощью метода laravel where, это сделает необходимое сравнение, а также сделает ваш код более читабельным.

Для этого можно использовать следующий запрос:

DB::connection('mongodb')->collection('email_message')
    ->where("reference", $referanceId)->first();

Если ваше значение содержит несколько ссылочных идентификаторов в виде строки, вы можете использовать:

$regexQuery = '/.*'.$referanceId.'.*/';
DB::connection('mongodb')->collection('email_message')
    ->where("reference", 'regexp', $regexQuery)->first();

Это будет соответствовать referenceId в любой позиции в строке.

Как @hetalgotel упомянул в комментариях , другой запрос для этого:

$mailExists->where("reference", 'like', "%$referanceId%")

Этот результат дал ожидаемый результат в этом сценарии

...