目前我们项目用的是2.6版,有点低了...所以遇到了很多的坑,在此和大家分享一下,大家共勉,同时也巩固一下知识
基础
- mongodb严格区分字符串和数字,如果mongodb中存的是字符串,查询时必须是字符串,如果是数字,需要强制转一下
$project['student_status_res'] = [ '$and' => [ [ '$eq' => ['$student_status_id', 100,] ], [ '$lte' => ['$created', $endTime] ], [ '$or' => [ [ '$eq' => ['$end_date', '0000-00-00 00:00:00'] ], [ '$gte' => ['$end_date', $endTime] ] ], ], ] ];
管道(aggregate)
$match只能实现一些简单的搜索条件,如果搜索条件比较复杂,需要在$project中转换一下
- $project 可以判断当前集合中的某一列是否符合条件
$project['student_status_res'] = [ '$and' => [ [ '$eq' => ['$status', "3"] ], [ '$gte' => ['$retreat_time', $startTime] ], [ '$lte' => ['$retreat_time', $endTime] ], ] ];
- '$substr'截取指定长度的字符
'one_category_id' => ['$substr' => ['$category_level', 0, 32]],
- $match类似于mysql的where条件,返回满足条件的数据
- $in查询数组格式为0开始的索引数组,建议可以通过array_values重新排一下索引
排序(按修改时间降序排)
'$sort' => [ 'modified' => -1, ],
分页(分页前有必要排一下序,否则可能导致显示的数据混乱,踩过坑。。)
[ '$skip' => (int)$offset, ], [ '$limit' => (int)$pageSize, ],
- $skip 跳过指定数量的数据
$limit 每页显示的条数