Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How can I create a partial key where the parent uses an ID identifier in Datastore #567

Closed
byrneciaran opened this issue May 8, 2015 · 7 comments
Assignees
Labels
api: datastore Issues related to the Datastore API. type: question Request for information or clarification. Not an issue.

Comments

@byrneciaran
Copy link

I know to create a partial key I can write

var key = ds.key(['Entry']);

how can I write a partial key with a parent without specifying name ? For example

var key = ds.key(['Entry', 'Foo', 'Todo']);

creates a partial key with a parent, but the parent key has an identifier name='foot'. How can I state that the parent should use a numeric id (or am I misunderstanding this) ?

@jgeewax
Copy link
Contributor

jgeewax commented May 8, 2015

var key = dataset.key(['Entry', 1234, 'ChildEntryKind']);

should do what you want, right?

@jgeewax jgeewax added type: question Request for information or clarification. Not an issue. api: datastore Issues related to the Datastore API. labels May 8, 2015
@byrneciaran
Copy link
Author

I was looking for an automatically generated numeric ID. The same way the key will produce something like 5657382461898752 for the ChildEntryKind. I don't want to stick in 1234 for every parent Entry.

@jgeewax
Copy link
Contributor

jgeewax commented May 8, 2015

If you want an auto-generated ID for the parent, you would have to save it first, and then use that auto-generated ID. There is currently no way to create both a parent and a child in a single request where both have auto-generated IDs. That is, you can't make a single request to do the equivalent of this:

var key = dataset.key(['ParentKind', <auto-generated-id>, 'ChildEntityKind']);

You can, however, create a child with a non-existent parent, if you choose the name of the parent. That is, if you create the following key, you'll create an entity of Kind ChildEntityKind with an automatically generated ID, which is a child of the non-existent entity {kind: 'ParentKind', keyName: 'parent-entity-key'}:

var key = dataset.key(['ParentKind', 'parent-entity-key', 'ChildEntityKind']);

@stephenplusplus
Copy link
Contributor

I don't believe there's anything else our library can do, since we're limited by:

There is currently no way to create both a parent and a child in a single request where both have auto-generated IDs.

@jgeewax is it worth keeping this issue open to track when that feature launches, or is it not something that's being worked on?

@jgeewax
Copy link
Contributor

jgeewax commented Jun 4, 2015

Technically, there a few options here:

  1. Pick the key names for both keys. Then you're all set.

  2. Pick a parent key (number or name), and then auto-generate the child key. It's best to try to pick something uniformly distributed (maybe a random base-64 string? or a random number between 1 and ). Then you could always do:

    var key = dataset.key(['ParentKind', <random string or integer>, 'ChildKind']);
  3. Use the allocateIds API method (I don't know if we support that...?) to get a randomly generated ID, and then use that. Then you could do this in a single transaction:

    var firstKey = <allocateIds for a ParentKind key>;
    var childKey = <allocateIds for a ChildKind key, parent = previous key>;
    dataset.runInTransaction(function() {
    <save both entities at once>;
    });

    Obviously this means you have to make 3 separate API calls rather than one, but the important one is in a transaction (if that's what you're looking for).

Keep in mind that the child can exist without the parent -- so the key ParentKind:1234/ChildKind:5678 doesn't require ParentKind:1234 to exist at all.

@stephenplusplus: Do we support allocating IDs at all using gcloud-node?

@stephenplusplus
Copy link
Contributor

@stephenplusplus
Copy link
Contributor

I think we've gone over all of the options here, and we currently support solutions 1-3 mentioned above. Please re-open if there's more we can do.

sofisl pushed a commit that referenced this issue Sep 15, 2022
* feat!: Update library to use Node 12

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
sofisl pushed a commit that referenced this issue Oct 12, 2022
* chore(main): release 3.1.3

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
sofisl pushed a commit that referenced this issue Oct 13, 2022
* chore(main): release 3.1.3

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
sofisl pushed a commit that referenced this issue Nov 11, 2022
🤖 I have created a release *beep* *boop*
---


## [3.0.0](googleapis/nodejs-iot@v2.5.1...v3.0.0) (2022-06-20)


### ⚠ BREAKING CHANGES

* update library to use Node 12 (#566)

### Features

* AuditConfig for IAM v1 ([#552](googleapis/nodejs-iot#552)) ([1b1a3d2](googleapis/nodejs-iot@1b1a3d2))


### Bug Fixes

* **deps:** update dependency @google-cloud/pubsub to v3 ([#569](googleapis/nodejs-iot#569)) ([77a2005](googleapis/nodejs-iot@77a2005))
* **deps:** update dependency @google-cloud/storage to v6 ([#568](googleapis/nodejs-iot#568)) ([b15efb4](googleapis/nodejs-iot@b15efb4))


### Build System

* update library to use Node 12 ([#566](googleapis/nodejs-iot#566)) ([1efe654](googleapis/nodejs-iot@1efe654))

---
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
sofisl added a commit that referenced this issue Nov 11, 2022
* chore(main): release 3.1.0

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
Co-authored-by: sofisl <55454395+sofisl@users.noreply.github.com>
sofisl pushed a commit that referenced this issue Jan 10, 2023
This PR was generated using Autosynth. 🌈

Synth log will be available here:
https://source.cloud.google.com/results/invocations/9610e861-65a2-4035-85ab-1303620c4597/targets

- [ ] To automatically regenerate this PR, check this box.

Source-Link: googleapis/synthtool@363fe30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
api: datastore Issues related to the Datastore API. type: question Request for information or clarification. Not an issue.
Projects
None yet
Development

No branches or pull requests

3 participants