Query firestore database for document id
Try this:
db.collection('books').doc('fK3ddutEpD2qQqRMXNW5').get()
(The first query is looking for an explicit user-set field called 'id', which probably isn't what you want.)
Firestore query: How to filter on document id?
This is possible using FieldPath.documentId(), but there are limitations.
db.collection('CollectionName').where(firebase.firestore.FieldPath.documentId(), '<', '100').get()
But be aware that document IDs are strings and therefore this will include documents with ID '0' or '1', but not '2' since '2' > '100' lexicographically.
So if you want a numeric query, you'll need to write the document ID as a numeric field in the document and then do a normal query on it.
Reference: https://stackoverflow.com/a/48467056/1212903
Firebase Firestore query by document id using swift
To filter on the document ID in a query, you can use FieldPath.documentID()
in Swift too: https://firebase.google.com/docs/reference/swift/firebasefirestore/api/reference/Classes/FieldPath#/c:objc(cs)FIRFieldPath(cm)documentID. But if you do this in a single document, that'd be the same as just doing document(User.id)
.
Get Document ID from Firebase Query using Flutter
A query can return multiple documents that match the given condition and returns a QuerySnapshot (that contains zero or many DocumentSnapshots).
FirebaseFirestore.instance
.collection('userNames')
.where('uid', isEqualTo: FirebaseAuth.instance.currentUser!.uid)
.get()
.then((value) {
value.docs.forEach((element) {
print(element.id);
});
});
Here value.docs
is a list of all the documents included in this snapshot and each of them has id
property (the document ID).
Firebase query by document id PLUS property value
If you want to get a document only if a field has a certain value, you won't be able to use get() on its DocumentReference. You will have to perform a query on the collection using both the document ID and field as filters on that query like this, using FieldPath.documentId():
const qsnap = await firebase.firestore()
.collection('blog-posts')
.where(firebase.firestore.FieldPath.documentId(), "==", id)
.where("published", "==" true)
.get()
This yields a QuerySnapshot, which you will have to check if the document was provided.
if (qsnap.docs.length > 0) {
const doc = qsnap.docs[0];
}
Note that it still costs 1 document read to perform this query even if the document isn't returned.
Flutter-Firestore: get Document with know id from Collection Group Query
You can use collectionGroup()
query with a where()
clause.
Firestore.instance.collectionGroup('users').where('userIdField', isEqualTo: 'USER_ID')
You can read the user's company ID from the DocumentReference of that fetched document.
As @Frank commented, using where with document ID in a collection group query will not match. You would have to store user's UID as a field as well.
How to get document ID for a specific document?
First, create a variable called townid, and change your function to async, and use a stateful widget to update it, and use get instead of snapshots:
String townId = 'Get ID';
void _getId(town) async {
var data = await FirebaseFirestore.instance
.collection('towns')
.where('town_name', isEqualTo: town)
.get();
setState(() {
townId = data.docs[0].id; //because the query returns a list of docs, even if the result is 1 document. You need to access it using index[0].
});
print(townId);
}
In your button:
ElevatedButton(onPressed: () => _getId(_townChosen), child: Text(townId)),
Related Topics
Socket.Io 1.X: Use Websockets Only
No Ways to Have Class-Based Objects in JavaScript
Copy a Variable's Value into Another
Fetching Values from Email in Protractor Test Case
Regex for Number with Decimals and Thousand Separator
Get the Visible Height of a Div with Jquery
JavaScript Pass Object as Reference
Baking Transforms into Svg Path Element Commands
How to Use Preload.Js Properly in Electron
The Preferred Way of Creating a New Element with Jquery
Jquery Ajax Requests Are Getting Cancelled Without Being Sent
Script Tag in Angular2 Template/Hook When Template Dom Is Loaded
Spring Boot Controller - Upload Multipart and JSON to Dto
Is There a JavaScript Strcmp()