在带有 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 中的聚合函数