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

Posted

技术标签:

【中文标题】在带有 lumen 的 mongoDB 查询中:$or/$and/$nor 条目需要是完整对象【英文标题】:In mongoDB query with lumen : $or/$and/$nor entries need to be full objects 【发布时间】:2019-04-18 09:15:45 【问题描述】:

在我的 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】:

您可以使用 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。

正如@hetalgotel 在comments 中提到的那样,另一个查询是:

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

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

【讨论】:

我的情况就像在可能的数据库中它存储为 1,2,3,4,5 并且我必须匹配“1”然后我不能使用这个 qyery @hetalgohel,作为数组还是作为包含这些值的字符串? 作为字符串,我已经存入数据库了 我们可以在 mongodb 中使用 find_in_set 吗? 它正在使用 $mailExists->where("reference", 'like', "%$referanceId%");正如预期的结果

以上是关于在带有 lumen 的 mongoDB 查询中:$or/$and/$nor 条目需要是完整对象的主要内容,如果未能解决你的问题,请参考以下文章

带有 mongodb 的流明:出现错误:在 null 上调用成员函数 prepare()

在 Jessengers MongoDB 中使用 Laravel Lumen 中的聚合函数

Lumen连接MongoDB Atlas时认证失败

MongoDB 和 Artisan 在 Laravel 5 和 Lumen 上进行迁移

带有测试输出的 Lumen 5.1 播种

Lumen 在发布时给出带有 500 内部错误的空白页