如何将具有自定义ID的文档添加到firestore(Angular)

时间:2018-01-31 11:39:08

标签: javascript angular firebase google-cloud-firestore

是否有机会使用自定义生成的id将文档添加到firestore集合,而不是firestore引擎生成的id。

提前感谢您的回复。

8 个答案:

答案 0 :(得分:55)

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

这会创建一个ID为“LA”的文档:

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

这取自官方文档here

答案 1 :(得分:5)

this.afs.collection('[your collection]').doc('[your ID]').set([your document]);

答案 2 :(得分:2)

您可以这样做

// 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);

答案 3 :(得分:1)

db.collection(“用户”).document(mAuth.getUid())。set(用户)

此处,集合的名称为"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();
        }
    });
}

答案 4 :(得分:1)

使用ID创建新文档

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

EX:此示例以电子邮件作为文档的ID

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

答案 5 :(得分:1)

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

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

即使在Firestore保存任何内容之前,这对于将ID设置为另一个文档中的参考字段也很有用。如果不需要立即使用保存的对象,则无需等待ID,从而加快了处理速度。现在,set()调用与您可能在Angular中使用的管道是异步的

请注意,我没有将id: newId放在set对象中,因为Firestore默认不会将ID作为文档中的字段保存

答案 6 :(得分:1)

首先给出的代码是针对 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,您必须使用 Set 方法

如果此代码已过时,则查找新代码 Here

答案 7 :(得分:0)

如果您想添加不是 firestore 生成的自定义 ID,那么只需执行以下操作:

val u:String=FirebaseAuth.getInstance().currentUser?.uid.toString() FirebaseFirestore.getInstance().collection("Shop Details").document(u).set(data)

//u 不在 firestore 中,它将首先创建并添加数据 //数据是你想添加到firestore中的任何内容