如何添加自定义 ID 文档火灾恢复

是否有机会使用自定义生成的 id (而不是由火灾恢复引擎生成的 id)将文档添加到火灾恢复集合中?

148753 次浏览

要使用自定义 ID,您需要使用 .set,而不是 .add

这将创建 ID 为“ LA”的文档:

db.collection("cities").doc("LA").set({
name: "Los Angeles",
state: "CA",
country: "USA"
})

这是从官方文件 给你中提取的

万一你用的是角火,

class Component{
constructor(private afs: AngularFireStore) {} // imported from @angular/fire/firestore


addItem() {
this.afs.collection('[your collection]').doc('[your ID]').set({your: "document"});
}
}

Collection (“ users”) . document (mAuth.getUid ()) . set (user)

这里,集合的名称是 "users",文档名称是用户的 UID

这里你需要使用 set而不是 add

private void storeData(String name, String email, String phone) {


// Create a new user with a first and last name
Map<String, Object> user = new HashMap<>();
user.put("name", name);
user.put("email", email);
user.put("phone", phone);


// Add a new document with a generated ID
db.collection("users").document(mAuth.getUid()).set(user)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toasty.success(context,"Register sucess",Toast.LENGTH_SHORT).show();
}
});
}

创建 ID 的新文档

  createDocumentWithId<T>(ref: string, document: T, docId: string) {
return this.afs.collection(ref).doc<T>(docId).set(document);
}

例如: 这个例子使用电子邮件作为文档的 ID

this.fsService.createDocumentWithId('db/users', {}, credential.user.email);

为了扩展已接受的答案,如果您曾经希望您的客户端在推送到 Firest 之前为文档生成一个随机 ID (假设 AngularFire2之外存在相同的 createId()函数)

const newId = db.createId();
db.collection("cities").doc(newId).set({
name: "Los Angeles",
state: "CA",
country: "USA"
})


这对于将 ID 设置为另一个文档中的引用字段非常有用,甚至在 Firest 保存任何内容之前也是如此。如果您不需要立即使用已保存的对象,这样就不必等待 ID,从而加快了处理速度。set()调用现在与您可能在 Angular 中使用的管道是异步的

注意,我没有将 id: newId放在 set 对象中,因为默认情况下,Firest 不会将 ID 保存为 doc 中的字段

你可以这样做

// Inject AngularFirestore as dependency
private angularFireStore: AngularFirestore // from from 'angularfire2/firestore'


// set user object to be added into the document
let user = {
id: this.angularFireStore.createId(),
name: 'new user'
...
}


// Then, finally add the created object to the firebase document
angularFireStore.collection('users').doc(user.id).set(user);

首先给出的代码是用于 JavaScript 的,这是用于 Android Studio (JAVA)的

Map<String, Object> city = new HashMap<>();
city.put("name", "Los Angeles");
city.put("state", "CA");
city.put("country", "USA");
//Here LA is Document name for Assigning
db.collection("cities").document("LA")
.set(city)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "DocumentSnapshot successfully written!");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error writing document", e);
}
});

在添加数据时设置 ID,必须使用 预备方法

如果此代码过期,则查找新代码 给你

如果您想添加自定义 id,而不是生成的火灾恢复,那么只需这样做:

Val u: String = FirebaseAuth.getInstance () . currentUser? . uid.toString () GetInstance () . Collection (“ Shop Details”) . document (u) . set (data)

//u 不在火恢复中,它将首先创建并添加数据 //data 是您想要添加到 firestore 中的任何内容

这是一个用数据创建文档的函数,您可以选择自己生成 id 还是自动生成 id。如果在函数调用期间提供了 id,那么将要创建的文档将具有您提供的 id。

模块化 Firebase 火灾恢复9. +

import { getFirestore, serverTimestamp, collection, doc, setDoc, addDoc } from 'firebase/firestore/lite'
async create(id = null, data) {
const collectionRef = collection(getFirestore(), this.collectionPath)


const dataToCreate = {
...data,
createTimestamp: serverTimestamp(),
updateTimestamp: serverTimestamp()
}


const createPromise =
id === null || id === undefined
? // Create doc with generated id
await addDoc(collectionRef, dataToCreate).then(d => d.id)
: // Create doc with custom id
await setDoc(doc(collectionRef, id), dataToCreate).then(() => id)


const docId = await createPromise


return {
id: docId,
...data,
createTimestamp: new Date(),
updateTimestamp: new Date()
}
}

相同的功能,非模块化 Firebase 火灾恢复(< 版本9)

import { firebase } from '@firebase/app'
async create(data, id = null) {
const collectionRef = (await firestore()).collection(this.collectionPath)
const serverTimestamp = firebase.firestore.FieldValue.serverTimestamp()


const dataToCreate = {
...data,
createTimestamp: serverTimestamp,
updateTimestamp: serverTimestamp
}


const createPromise =
id === null || id === undefined
? // Create doc with generated id
collectionRef.add(dataToCreate).then(doc => doc.id)
: // Create doc with custom id
collectionRef
.doc(id)
.set(dataToCreate)
.then(() => id)


const docId = await createPromise


return {
id: docId,
...data,
createTimestamp: new Date(),
updateTimestamp: new Date()
}
}

如果有人在找第九版,我就把这个放在这里。

这是从医生那里拿的。

import { doc, setDoc } from "firebase/firestore";


// Add a new document in collection "cities" with "LA" as id
await setDoc(doc(db, "cities", "LA"), {
name: "Los Angeles",
state: "CA",
country: "USA"
});

db所在地:

const firebaseApp = initializeApp(firebaseConfig)
const db = getFirestore(firebaseApp)

经过长时间的研究,我自己找到了一个解决方案

实际上,如果我们先声明一个 < strong > String ,然后在散列表中调用它,它就不会工作。

所以,解决办法是:

 Map<String, Object> city = new HashMap<>();
city.put("batch", "25");
city.put("blood", ""+stuBlood.getText().toString());
city.put("email", ""+stuEmail.getText().toString());
city.put("facebook", ""+stuFacebook.getText().toString());
city.put("gender", ""+stuGender.getText().toString());
city.put("id", ""+stuID.getText().toString());
city.put("image", ""+stuImage.getText().toString());
city.put("location", ""+stuLocation.getText().toString());
city.put("name", ""+stuName.getText().toString());
city.put("phone", ""+stuPhone.getText().toString());
city.put("whatsapp", ""+stuWhatsApp.getText().toString());
city.put("telegram", ""+stuTelegram.getText().toString());

希望现在起作用了