在带有lumen的mongoDB查询中:$ or / $ and / $ nor条目必须是完整对象

时间:2018-11-15 09:47:44

标签: php mongodb laravel lumen

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

请帮助我解决此问题。谢谢。

1 个答案:

答案 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%")

在这种情况下,这产生了预期的结果