嵌套选择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 关键字作为日期范围(大于或等于且小于或等于)。现在只选择日期等于startTimeselPointX 的记录(因此,如果它们不同,则不会返回任何值)。

将您的时间条件更改为:

'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'=&gt;$out_port,'m_time'=&gt;$selPointX, 'm_time'=&gt;array('$gte'=&gt;$startTime)); echo $find_query; $result = $table -&gt; $find($find_query); echo $result; 任何输入?感谢@sashkello 的帮助 1. 'm_time' 问题并不完全正确(选择时间 = selPointX 和 > startTime)。 2. find($find_query) 而不是 $find($find_query) 好的。谢谢你。我会尝试看看它是否再次有效。我会带着结果回来。

以上是关于嵌套选择MongoDB查询错误的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB & Meteor - 推入嵌套数组的查询不起作用,没有抛出错误

MongoDB - 查询计算数组中的嵌套文档

mongodb 查询求助,嵌套数组里面查东西

MongoDB:如何使用查找查询填充嵌套对象?

在 Mongodb 中查询嵌套模式?

MongoDB:如何查询嵌套数组?