嵌套选择MongoDB查询错误
Posted
技术标签:
【中文标题】嵌套选择MongoDB查询错误【英文标题】:Nested Select Mongodb query error 【发布时间】:2013-07-16 01:57:44 【问题描述】:我正在尝试将以下示例从 mysql 转换为 Mongodb。
但是,我被困在一个点上。任何意见将不胜感激。
SQL 查询:
$cmd = "SELECT COUNT(*) FROM (SELECT * FROM pkt_tbl WHERE m_out_port= " . $out_port . " AND m_time<=" . $selPointX . " AND m_time>=" . $startTime . ") AS pkt_tbl WHERE m_in_port=" . $i;
Mongodb 查询(我尝试了什么):
$find_query = array('m_out_port'=>$out_port, 'm_in_port'=>$i,'m_time'=>array('lte' => $selPointX, 'gte'=>$startTime));
$find_projections = count();
$result = $table->find($find_query, $find_projections);
我尝试了什么(除了代码)
我阅读了 mongodb 文档和其他 php.NET (Mongodocs),但仍然找不到相关的解决方案。
我不确定这是否正确/我正走在正确的道路上。
请说明。 - R
【问题讨论】:
请检查。哎呀。我现在改了。它看起来没问题还是我需要做其他事情? 请不要在你的问题被回答后改变太多。而是使用 cmets 以防它不起作用或您有其他问题。你现在的错误是你错过了'$gte'和'$lte'中的'$'。 因为现在答案是在回答不同的问题,你看... 感谢您的意见。我在这里很新,但您是对的! :) 看起来在执行时,我在$find_projections = count();
遇到错误以这种方式使用 Select count(*) 是否合适? @sashkello
【参考方案1】:
您需要使用$gte
和$lte
关键字作为日期范围(大于或等于且小于或等于)。现在只选择日期等于startTime
和selPointX
的记录(因此,如果它们不同,则不会返回任何值)。
将您的时间条件更改为:
'm_time'=>array('$lte' => $selPointX, '$gte'=>$startTime)
如果您需要不包含这些时间,请使用$gt
和/或$lt
。
【讨论】:
看起来在执行时,我在$find_projections = count();
遇到了一个错误,这样使用Select count(*)合适吗?
我认为你只需要 $result = $table->count($find_query)
这是我的最终查询,但我仍然收到错误消息。如果我评论 $result
变量然后页面工作正常。 (我在单独的 php 文件中测试查询)$find_query = array('m_out_port'=>$out_port,'m_time'=>$selPointX, 'm_time'=>array('$gte'=>$startTime)); echo $find_query; $result = $table -> $find($find_query); echo $result;
任何输入?感谢@sashkello 的帮助
1. 'm_time' 问题并不完全正确(选择时间 = selPointX 和 > startTime)。 2. find($find_query) 而不是 $find($find_query)
好的。谢谢你。我会尝试看看它是否再次有效。我会带着结果回来。以上是关于嵌套选择MongoDB查询错误的主要内容,如果未能解决你的问题,请参考以下文章