我還沒有找到任何關於此的文檔,儘管它必須存在某處,因爲它相當簡單。Google雲數據存儲:使用密鑰
我可以查詢使用PHP的所有任務列表(例如)如下:
$query = $datastore->query();
$query->kind('tasklist')
->filter('date_approved', '<', 0)
->order("date_approved")
->order("date_updated", $query::ORDER_DESCENDING)
->limit(50);
$res = $datastore->runQuery($query);
而且關鍵看(例如,用於更新),我一直在使用:
foreach($res as $r) {
$parentkey = $r->key()->pathEnd()['name'];
echo $parentkey; //"default"
}
我發現,如果我「加入」子記錄,創建的,如下所示:
$childkey = $datastore->key('tasklist', $parentkey)
->pathElement('task', 'task001');
$entity = $datastore->entity($childkey, $myTaskArray);
$datastore->upsert($entity);
當我後來對那些查詢由「父」鍵:
$subquery = $datastore->query();
$subquery->kind('task')
->filter('date_approved','<',0)
->hasAncestor($datastore->key('tasklist', $parentkey))
->order("date_approved")
->order("date_updated", $subquery::ORDER_DESCENDING);
$subres = $datastore->runQuery($subquery);
然後打印爲子鍵的作用是相同的:
foreach($subres as $sr){
$childkey = $sr->key()->pathEnd()['name'];
echo $childkey; //"task001"
}
是否有與祖先那是少goofball比鑰匙和鑰匙的工作方法:$實體 - >鍵() - > PATHEND()[ '名稱'];
例如,在MongoDB中
$myobj = array();
$db->Insert($myobj);
echo (string) $myobj['_id']; //key
而且,我不應該能夠單獨提供的關鍵,而不必指定祖先鍵更新文檔?
$childkey = $datastore->key('tasklist', $parentkey)
->pathElement('task', "task001");
$entity = $datastore->lookup($childkey);
$entity = $datastore->entity($childkey, $myUpdatedTaskArray);
$datastore->update($entity, array("allowOverwrite"=>true));
與:
$childkey = $datastore->key('task', "task001");
$entity = $datastore->lookup($childkey);
$entity = $datastore->entity($childkey, $myUpdatedTaskArray);
$datastore->update($entity, array("allowOverwrite"=>true));
最後,我可以查詢實體和他們的後代,而不必做一個連接(我敢上面做),同時還篩選(date_approved < 0爲例)和排序(例如date_updated DESC)。
注:goofball是一個非技術術語
謝謝@jdp - ALL SOLID答案。而且非常有幫助。 –