關於php查詢mongodb限制返回欄位的問題

來源:互聯網
上載者:User

標籤:mongo   測試   取資料   find   str   mon   列印   一個   問題:   

最近想做一個前端控制介面欄位返回的一個基礎方法,通過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限制返回欄位的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.