Php 在lumen:$或/$和/$nor的mongoDB查询中,条目必须是完整对象

Php 在lumen:$或/$和/$nor的mongoDB查询中,条目必须是完整对象,php,mongodb,laravel,lumen,Php,Mongodb,Laravel,Lumen,在我的MongoDB中,我存储了如下值: { "_id" : ObjectId("5bed3f5019f0431be000412b"), "reference" : "SL2PR01MB2745E4160158C08C4B7A367285C30@SL2PR01MB2745.apcprd01.prod.exchangelabs.com,SL2PR01MB274333160158C08C4B7A367285C30@SL2PR01MB2745.apcprd01.prod.excha

在我的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/$和/$nor条目必须是完整对象


请帮我解决这个问题。谢谢。

您可以使用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();
这将匹配字符串中任何位置的引用ID

另一个查询中提到的@hetalgotel是:

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

这个方法在这个场景中产生了预期的结果

您可以使用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();
这将匹配字符串中任何位置的引用ID

另一个查询中提到的@hetalgotel是:

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

这一个在这个场景中产生了预期的结果

我的案例就像5月份的数据库一样,它存储为1,2,3,4,5,我必须匹配“1”,然后我不能使用它qyery@hetalgohel,作为数组还是作为包含这些值的字符串?作为字符串,我已将其存储在数据库中。我们可以使用mongodb中的find_吗?它正在使用$mailExists->where(“reference”、“like”、“%$referenceId%”;正如预期的结果一样,我的案例类似于5月份的数据库,它存储为1,2,3,4,5,我必须匹配“1”,然后我不能使用它qyery@hetalgohel,作为数组或包含这些值的字符串?作为字符串,我已将其存储在数据库中。我们是否可以使用mongodb中的find_?它正在使用$mailExists->where(“引用“,'like',“%$referenceId%”;作为预期结果