首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:使用Keys

:使用Keys
EN

Stack Overflow用户
提问于 2017-09-05 20:20:28
回答 1查看 773关注 0票数 1

我还没有找到任何关于这方面的文档,尽管它必须存在于某个地方,因为它相当简单。

我可以使用PHP查询所有任务列表(例如),如下所示:

代码语言:javascript
复制
$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);

为了查看键(例如,更新),我一直在使用:

代码语言:javascript
复制
foreach($res as $r) {
    $parentkey = $r->key()->pathEnd()['name'];
    echo $parentkey; //"default"
}

我注意到,如果我“加入”子记录,则创建如下:

代码语言:javascript
复制
$childkey = $datastore->key('tasklist', $parentkey)
                ->pathElement('task', 'task001');
$entity = $datastore->entity($childkey, $myTaskArray);
$datastore->upsert($entity);

稍后,当我通过“父”键查询这些键时:

代码语言:javascript
复制
$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);

然后打印给孩子的钥匙也是一样的:

代码语言:javascript
复制
foreach($subres as $sr){
    $childkey = $sr->key()->pathEnd()['name'];
    echo $childkey; //"task001"
}

有没有比$entity->key()->pathEnd()‘name’更少使用祖先的键和键的方法;

例如,在MongoDB中

代码语言:javascript
复制
$myobj = array();
$db->Insert($myobj);
echo (string) $myobj['_id']; //key

另外,难道我不能单独提供密钥而不必指定祖先密钥来更新文档吗?

代码语言:javascript
复制
$childkey = $datastore->key('tasklist', $parentkey)
           ->pathElement('task', "task001");
$entity = $datastore->lookup($childkey);
$entity = $datastore->entity($childkey, $myUpdatedTaskArray);
$datastore->update($entity, array("allowOverwrite"=>true));

相对于:

代码语言:javascript
复制
$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 )。

注:傻瓜球是非技术术语。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-06 15:02:36

有没有比$entity->key()->pathEnd()‘name’更少使用祖先的键和键的方法;

数据存储中的密钥是一个相当复杂的概念,因此它们不能完全按照您在Mongo的工作中所建议的方式使用。但是,Google\Cloud\Datastore\Key类上有一些帮助程序,可以简化您的代码。您可以使用pathEndIdentitifer代替pathEnd()['name']。例如,$key->pathEndIdentifier()。这非常有用,特别是在您可能不知道密钥是使用ID还是使用名称的情况下。

另外,难道我不能单独提供密钥而不必指定祖先密钥来更新文档吗?

不幸的是没有。表单[Parent: john, Child: junior]的键是指与表单[Child: junior]的键完全不同的实体。若要使用父实体,必须提供完整的密钥路径。不过,如果你能想出办法让这件事对你更容易,请让我知道,最好是通过提出问题。我很想弄清楚如何让这件事变得更简单--我知道现在的情况有点复杂。

最后,我是否可以查询实体及其后代,而不必执行连接(正如我在上面所做的那样),同时仍然进行筛选(例如date_approved<0)和排序(例如,date_updated DESC )。

不幸的是没有。您可以查询一种或无一种(即无电查询)。后一种类型可以查询多种类型,但不能对实体属性或值进行筛选。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46062798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档