con c 排序 参数数组 skip 测试结果 要去 ret string
最近想做一个前端控制接口字段返回的一个基础方法,通过 mongodb 的 find($query,$field) 查询来规定查询的字段,但是遇到这么一个问题:
工作代码中有两个封装方法 :
- /**
- * 查询一条记录
- * @param string 集合名
- * @param array 查询条件
- * @param array 需要返回的字段
- * @return array 查询的结果
- */
- public
- function find_one($coll_name, $condition = array(), $ret_fields = array('_id' = >0)) {
- return $this - >docsdb - >find_one($coll_name, $condition, $ret_fields);
- }
- /**
- * 查询
- * @param string 集合名
- * @param array 查询的条件array<br/>如<i>array(col_a=>111)</i>
- * @param array 集合过滤器array<br/>完整的样子想这个:<i>array(sort=>array(col_a=>1,col_b=>-1), skip=>100, limit=>10, timeout=>5000, immortal=>true)</i>,这表示:
- * <ol>
- * <li>wrapped 以wrapped为封装为数组的键,默认按数组先后顺序</li>
- * <li>_id,默认不返回数据带有MongoID字段,如果指定了返回列的话也是一样的效果</li>
- * <li>sort 以col_a为ASC,col_b为DESC排序,可以多列组合</li>
- * <li>skip 表示从101条记录开始取数据,即跳过了前100条</li>
- * <li>limit 本次选取的条数</li>
- * <li>timeout 表示等待响应的时间(暂不使用)</li>
- * <li>immortal 表示是否维持链接永久有效,默认true,此时timeout失效(暂不使用)</li>
- * </ol>
- * @param array 需要返回的字段(通常只返回必要的字段可以加快响应速度)
- * @return mixed 查询的结果
- */
- public
- function find($coll_name, $condition = array(), $result_filter = array('wrapped' = >'', 'with_objectId' = >0, 'timeout' = >5000, 'immortal' = >true), $ret_fields = array()) {
- return $this - >docsdb - >find($coll_name, $condition, $result_filter, $ret_fields);
- }
- * *
- 'with_objectId' = >0已在传入参数时设置为1
- **
- 根据以上描述,$ret_fields就是mongodb find($query,$field)中的那个field,但是通过测试,我发现了这么一个问题,如果我想要去显示id,传入参数数组
- $ret_fields = array(
- '_id' => 1,
- 'account'=> 1,
- 'card' => 1
- ),
- 并调用find方法,根据理论来说,这个时候'_id'这个字段也是显示的,并且我通过这个条件直接查询mongodb,也是显示的,但是打印出来的数据却是不带id的,数据如下:
{
"account": "qwe",
"card": ""
}
- * **补充个测试结果,如果find方法不传入$ret_fields变量过去,即不限制返回字段的话,是存在'_id'的
- 通过修改条件,发现这个'_id' = >1这个条件写不写都没用,于是我用相同的
- $ret_fields去调用了find_one方法,这个时候竟然是返回'_id'字段的,数据如下
{
"_id": {
"$id": "58f472672430e11817000152"
},
"account": "qwe",
"card": ""
}
这个问题先记录在这吧,以后解决了再记录一下解决方法,如果有大神可以解释下这个原因,请不吝赐教,谢谢!
关于 php 查询 mongodb 限制返回字段的问题
来源: http://www.bubuko.com/infodetail-2129084.html