- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用lumen和mongodb
我想获取(未读总数)和基于文件夹的消息总数
我的 mongodb 查询如下所示,
$totalEmails = DB::connection('mongodb')
->select("sum(if(is_read==0,1,0)) as unread", "count(message_id) as total", "folder_id")
->collection('email_message')
->where('email_account_id', (int)$request->email_account_id)
->where('status', "Active")
->groupBy("folder_id")
->get();
它给了我如下错误,
FatalErrorException in Connection.php line 333:
Call to a member function prepare() on null
请帮我解决这个问题。谢谢。
我已通过如下更改查询解决了该错误,
$totalEmails = DB::connection('mongodb')
->collection('email_message')
->select("sum(if(is_read==0,1,0)) as unread", "count(message_id) as total", "folder_id")
->where('email_account_id', (int)$request->email_account_id)
->where('status', "Active")
->groupBy("folder_id")
->get();
但它没有给我预期的结果,
它给我的结果如下,
[_id] => Array
(
[folder_id] => 5bee461e19f043020c001844
)
[folder_id] => 5bee461e19f043020c001844
[sum(if(is_read==0,1,0)) as unread] =>
[count(message_id) as total] =>
但我的期望是
[_id] => Array
(
[folder_id] => 5bee461e19f043020c001844
)
[folder_id] => 5bee461e19f043020c001844
[unread] => 2
[total] => 10
你能告诉我查询哪里出了问题吗???
如果我使用下面的查询
$totalEmails = DB::connection('mongodb')
->selectRaw("sum(if(is_read==0,1,0)) as unread", "count(message_id) as total", "folder_id")
->collection('email_message')
->where('email_account_id', (int)$request->email_account_id)
->where('status', "Active")
->groupBy("folder_id")
->get();
它给了我这样的错误,
ErrorException in Builder.php line 245:
Argument 2 passed to Illuminate\Database\Query\Builder::selectRaw() must be of the type array, string given,
如果我使用以下查询,
$totalEmails = DB::connection('mongodb')
->collection('email_message')
->selectRaw("sum(if(is_read==0,1,0)) as unread,count(message_id) as total,folder_id")
->where('email_account_id', (int)$request->email_account_id)
->where('status', "Active")
->groupBy("folder_id")
->get();
它给了我这样的结果,
[_id] => Array
(
[folder_id] => 5bee461e19f043020c001844
)
[folder_id] => 5bee461e19f043020c001844
[sum(if(is_read==0,1,0)) as unread,count(message_id) as total,folder_id] =>
请帮助我获得预期的结果
最佳答案
据我所知,这是一个执行起来相当复杂的查询,并且很难用 laravel 方法生成,因此我建议使用 $aggregate
进行原始查询,如下例所示:
$totalEmails = DB::connection("mongodb")
->collection("email_message")
->raw(function ($collection) {
return $collection->aggregate(
[
[
"\$match" => [
"email_account_id" => (int)$request->email_account_id,
"status" => "active"
]
],
[
"\$group" => [
"_id" => [
"folder_id" => "\$folder_id"
],
"unread" => [
"\$sum" => [
"\$switch" => [
"branches" => [
["case" => [
"\$eq" => [
"\$is_read", '0,1,0'
]
],
"then" => 1
]
],
"default" => 0
]
]
],
"total" => [
"\$sum" => 1
]
]
]
]
);
});
$collectedResult = array();
foreach ($result as $k => $v) {
$collectResult[] = $v->jsonSerialize();
}
return $collectedResult;
我已将其格式化为尽可能可读,并且我将尽力解释查询的每个部分,以便您知道它的作用。
通过使用raw
语句,我们可以使用aggregate()
函数来模拟mongo $aggregate
。
首先,我们要过滤 email_account_id
,这是使用 $match
方法完成的,请注意,$
已转义,否则 php 会将其解释为变量。
之后我们需要执行分组来完成这部分:
"_id" => [
"folder_id" => "\$folder_id"
]
这将创建 _id
列,其中包含一个带有 folder_id
键的数组,并将数据库列“folder_id”的所有唯一值收集到该值中。
因此,这部分将生成一个具有唯一folder_ids的元素数组,然后必须计算这些文件夹的未读消息和总消息数。
总计很简单,通过 $sum
运算符完成。未读部分有点复杂,因为这需要对 is_read 运算符进行过滤。这是通过 switch 语句和默认值 0 完成的(条件失败时不计算)。
原始查询将返回一个MongoCursor
,因此最后一部分是收集这些结果
希望这对您有所帮助,如果有任何不清楚的地方,请告诉我。
关于php - 流明与 mongodb :getting error : Call to a member function prepare() on null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53331812/
我对 MySql 有疑问,详情如下:我创建了一个新的模式/数据库,(仅)执行了这个查询: create table mytable ( id varchar(50) not null, name va
我正面临着 continuum 的发布问题:准备阶段在 scm-check-modifications 步骤中失败并出现错误: [ERROR] org.apache.maven.shared.rele
由于我要连接到外部数据库,因此我需要一种仅在必要时(如果有查询)才连接到数据库的方法。 我在 StackOverflow 上找到了这个答案:Auto connecting to PDO only if
每次我尝试将中等大小的 JSON 对象同步到我的数据库时都会遇到这个问题,以便我们可以对其执行一些报告。通过调查可能导致它的原因,我发现了有关此事的这些链接。 http://blog.corrlabs
我有从多个表返回结果的 MySQL View , 我正在尝试从 laravel 项目的这个 View 中进行一些查询, 本地服务器没有问题 但在远程服务器上显示以下错误 "General error:
我重写了我的网站 php 代码并添加了 MySQL 存储过程。 在我的本地版本中,一切正常,但在我将网站上传到托管服务器后,我不断收到 fatal error “准备好的语句需要重新准备”。 有时页面
我重写了我的站点 php 代码并添加了 MySQL 存储过程。 在我的本地版本中,一切正常,但在我将我的网站上传到托管服务器后,我不断收到 fatal error “Prepared statemen
我重写了我的站点 php 代码并添加了 MySQL 存储过程。 在我的本地版本中,一切正常,但在我将我的网站上传到托管服务器后,我不断收到 fatal error “Prepared statemen
我在运行批处理作业时收到以下错误。 sql.SQLException: Prepared statement needs to be re-prepared 什么情况下会遇到此错误? 最佳答案 这是一
prepare for segue 和 prepare for unwind 之间有什么区别?我已经将这两个实现到 Xcode 项目中,它们都得到了相同的结果。我实现这两个功能的代码是:(with p
作为指南,用于准备测试数据库的命令是 bundle exec rake db:test:prepare 但是,我发现以下命令也有效并为我创建了测试数据库。 bundle exec rake test:
我最近启动了我的基于 Laravel 的网站,我没有遇到任何问题,但是 40 分钟前当我检查它时我得到了这个错误: SQLSTATE[HY000]: General error: 1615 Prepa
更新:查询工作正常,如下所示;当我从 View 中选择时,错误只会出现。 $query = " SELECT ModuleID, ModuleName, Credits, Lecturer, Room
我的laravel项目每天早上都会出错,一段时间后就没事了。我不明白这是什么问题。 我用谷歌搜索了一下,发现了一些类似的问题。但这并不能解决我的问题。 db version is 5.1.1 最佳答案
所以根据this link一个是快捷方式包装器(所以我猜它们是一样的)。 当我运行 bundle exec rake db:test:prepare 时,我得到了这个错误: Don't know ho
我有两个 View ,第一个是一个简单的 View ,其中包含一些有关用法的介绍,通过单击按钮可以打开主视图。主视图有很多图像和两个自定义的表格,行由文本和图像组成,因此主视图的创建相当慢。分析器显示
大约 10 天前,我向我的 iTunes Connect 帐户添加了两个应用程序。一个是“轻型”版本,另一个是收费的。完整版本已经在应用商店上架,但免费版本的状态只是“准备上传”。十天后!一定有什么问
我在运行 mvn release:prepare 时遇到问题。我有以下消息: [ERROR] Failed to execute goal org.apache.maven.plugins: mave
我正在 MainActivity 处理程序的帮助下更新进度条但它给出了错误:无法在未调用 Looper.prepare() 的线程内创建处理程序 Error public class MainActi
在我的 django 项目中,我有 4 个模型,它们都连接在一条链中。 模型_D > 模型_C > 模型_B > 模型_A 因此 Model_C 有一个指向 Model_B 的外键字段,而 Model
我是一名优秀的程序员,十分优秀!