MongoDB 聚合中空字段的投影

3

我正在使用聚合查询从MongoDB中查找结果,使用以下查询语句。

$y=2000;
$project['pud_year']=array('$year'=>'$pud');
$conditions=array('aggregate'=>array(       
                        array('$match'=>array('pid'=>$project_id)),
                        array('$project'=>$project),
                        array('$match'=>array('pud'=>$y)),
                        ));
$this->paginate=array('limit' => 50,'conditions'=>$conditions);
$test=$this->paginate();

但是我遇到了错误:无法将BSON类型EOO转换为日期

经过搜索,我发现在聚合中,投影的日期字段不能在整个集合中的任何位置为空。但在我的情况下,pud 不是必须的。当我从查询中删除 pud 的投影时,它可以正常工作。

如果我不将 MongoDate 投影到 $year 中,则无法仅获取 2000 年的结果。

请帮助我找出解决方案。

1个回答

1

检查它。然后让你知道。 - عثمان غني
数组('$project' => array("pud_year"=> array('$year' => array('$ifNull'=> array('$pud',nullFieldDt))))) - 您可以通过这种方式构建ifNull结构。其中,nullFieldDt是没有日期字段的记录的字段的默认值。 - BatScream
我正在使用它,如下所示:$project['pud_year'] = array('$year' => array('$ifNull'=> array('$pud',nullFieldDt))); 但是它会出现错误:“$year运算符不接受对象作为操作数”。 - عثمان غني
@BatScream 这个不起作用。在 $project['pud_year'] = array('$year' => array('$ifNull'=> array('$pud',nullFieldDt))); 有什么问题吗? - عثمان غني
你应该将 'nullfielddt' 变量初始化为一些你不想匹配的虚拟日期。例如,var 'nullfielddt'=new Date(); - BatScream
nullFieldDt声明为日期类型也会产生相同的错误。还是说我需要按照某种特定的格式来格式化日期? - عثمان غني

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接