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

[cloud_firestore] Need id generator like createId() function in AngularFire #49

Closed
eugvb opened this issue Aug 27, 2019 · 11 comments
Closed

Comments

@eugvb
Copy link

eugvb commented Aug 27, 2019

In some cases I need generate id before store document in firestore.
In AngularFire there is function createId()
In Flutter I can import 'package:cloud_firestore/src/utils/auto_id_generator.dart' (since 0.12.8, push_id_generator before)
and then use AutoIdGenerator.autoId()
But it's not true way, because I should import implementation files from another package.

@cmkweber
Copy link

cmkweber commented Sep 9, 2019

CollectionReference has an add method which returns an auto-generated ID:

https://pub.dev/documentation/cloud_firestore/latest/cloud_firestore/CollectionReference/add.html

@BondarenkoStas
Copy link

@eugvb Please report if the comment above solved your issue.

@eugvb
Copy link
Author

eugvb commented Sep 12, 2019

Maybe it is not perfect way, but I persist Document Id inside it. So I need generate id before calling add() method.

@tantzygames
Copy link

tantzygames commented Sep 13, 2019

I use:
String id = reference.document().documentID;

Then apply the id within the document and any other documents, then save.

There is an issue with both this and add() that is only occurring recently. iOS is creating a different format of id than Android, where they used to be the same. So you may be better off creating your own id system...

Edit: I notice this was new to 0.12.7 but is now consistent across iOS and Android in 0.12.8. Unfortunately the new format of id's are no longer chronological so I'm using the old PushIdGenerator for id's that I prefer to be chronological.

@eugvb
Copy link
Author

eugvb commented Oct 8, 2019

Ok, storing Document Id in itself not good practice. So in this case no need for id generation.

But what about transaction or batch writes?
For example, I want to add document to collection and then store it Id in other document

Firestore.instance.runTransaction((tx) async {
  String docId = 'docId';//It should be generated
  await tx.set(Firestore.instance.collection('collection').document(docId), {'some':'data'});
  //There i need docId to store it in other Document
  await tx.set(Firestore.instance.collection('collection2').document('DocumentId2'), {'docId':docId});
});

Transaction doesn't have add method, so I need use set with generated id.
With Batch write situation is similar.

@cmkweber
Copy link

cmkweber commented Oct 8, 2019

Use document without passing a path:
https://pub.dev/documentation/cloud_firestore/latest/cloud_firestore/CollectionReference/document.html
This generates a unique id without setting it within database like add does.

@eugvb
Copy link
Author

eugvb commented Oct 8, 2019

It is solution, thank you

@sultanmyrza
Copy link

I know its late but here is what I did

String randomId() {
    var _randomId = Firestore.instance.collection('').document().documentID;
    print(randomId());
    return _randomId;
}

@Limitless-Kode
Copy link

Limitless-Kode commented May 29, 2020

I know its late but here is what I did

String randomId() {
    var _randomId = Firestore.instance.collection('').document().documentID;
    print(randomId());
    return _randomId;
}

Can this produce a unique ID? I am thinking it would somehow create an ID that already exists.

@cmkweber
Copy link

@Gintasz
Copy link

Gintasz commented Jul 20, 2020

I know its late but here is what I did

String randomId() {
    var _randomId = Firestore.instance.collection('').document().documentID;
    print(randomId());
    return _randomId;
}

Doesn't work on web at the present moment (cloud_firestore: 0.13.7), getting this error:
Function Firestore.collection() requires its first argument to be of type non-empty string, but it was: ""

@firebase firebase locked and limited conversation to collaborators Aug 20, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants