在我的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();
但是它给了我如下错误:
Find.php第299行中的ServerException:
$ or / $ and / $ nor条目必须是完整对象
请帮助我解决此问题。谢谢。
答案 0 :(得分:2)
您可以使用laravel where
方法更轻松地完成此操作,这将完成您想要的比较,并使您的代码更具可读性。
您可以使用以下查询来完成此操作:
DB::connection('mongodb')->collection('email_message')
->where("reference", $referanceId)->first();
如果您的值包含多个参考ID作为字符串,则可以使用:
$regexQuery = '/.*'.$referanceId.'.*/';
DB::connection('mongodb')->collection('email_message')
->where("reference", 'regexp', $regexQuery)->first();
这将在字符串的任何位置匹配referenceId。
在comments中,@ hetalgotel提到了另一个查询:
$mailExists->where("reference", 'like', "%$referanceId%")
在这种情况下,这产生了预期的结果