如何在 Firestore 中更新文档中的字段

How to update a field in document in a firestore

我正在尝试使用 Firebase Firestore 为我的 android 应用程序更新特定文档中的字符串字段,但我看到的每一种方法都是在知道我发现很难在我的程序中找到的文档引用时。 想为另一种方法寻求帮助或帮助使用特定字段值查找文档参考。 提前致谢。 (顺便说一句,使用 C#)

private async Task<string> GetDocRefAsync(string userId)
        {
            Object obj = await FirestoreData.GetFirestore().Collection(DBConstants.FS_COLLECTION_USERS).
                    WhereEqualTo(DBConstants.FS_COLLECTION_USERS_USER_ID, userId).Get();
            QuerySnapshot snapshot = (QuerySnapshot)obj;
            if (snapshot.IsEmpty)
            {
                Log.Debug("UpdateGroupAsync", "userId: " + userId + " not found");
                return null;
            }
            string docRef = "";
            foreach (DocumentSnapshot item in snapshot.Documents)
            {
                //docRef = item.;
                
            }
            return docRef;
        }

首先,我尝试使用此代码查找文档引用,但即使在获得正确的文档后也没有获取引用的功能。 倒数第四行是我找不到的地方

database pic

this.groupCode = code;
                string strUserRef = GetDocRefAsync(userRef).ToString();
                DocumentReference docReference = database.Collection(DBConstants.FS_COLLECTION_USERS_GROUPS_CODE).Document(strUserRef);
                docReference.Update(DBConstants.FS_COLLECTION_USERS_GROUPS_CODE, groupCode);

如果要获取字段具有给定值的文档,可以使用 query。然后一旦查询 returns,您可以在返回的文档中的每个 DocumentShapshot 上使用 .Id 字段获取文档 ID。

您还需要为返回值添加 await,因为它是返回 Task<string> 而不返回 string 的异步方法。

private async Task<string> GetDocRefAsync(string userId) {
    CollectionReference usersRef = FirestoreData.GetFirestore().Collection(DBConstants.FS_COLLECTION_USERS);
    Query query = usersRef.WhereEqualTo(DBConstants.FS_COLLECTION_USERS_USER_ID, userId);

    // or GetSnapshotAsync depending on the version of firebase
    QuerySnapshot querySnapshot = await query.Get();
       
    // Note: if it matches multiple documents this will just return
    // the ID of the first match
    foreach (DocumentSnapshot item in snapshot.Documents)
    {
        return item.Id;
    }

    Log.Debug("UpdateGroupAsync", "userId: " + userId + " not found");
    return null;
}

您可以像这样使用它来更新文档(请注意,您在这里使用了不同的集合 - 可能是错误的)。

string userDocId = await GetDocRefAsync(userId);

CollectionReference userCollection = database.Collection(DBConstants.FS_COLLECTION_USERS);
DocumentReference docReference = userCollection.Document(userDocId);

// or UpdateAsync depending on your version of firebase
docReference.Update(DBConstants.FS_COLLECTION_USERS_GROUPS_CODE, groupCode);