Используйте метод document(String)
для db
, который согласно документам создаст документ, если он не существует (https://firebase.google.com/docs/firestore/manage-data/add-data)
Map<String, Object> room = new HashMap<>();
room.put("feet", "...");
...
db.collection("rooms").document("the new room id")
.set(room)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
...
}
})
.addOnFalureListener(...)
Это если вы знаете идентификаторы вашегодокументы, или вы хотите установить идентификатор самостоятельно. Если это так, вы можете заменить аргумент, переданный .document(...)
перед добавлением нового элемента. В качестве альтернативы, вы можете использовать метод add()
, который создаст новый документ с автоматически сгенерированнымID для вас.
В вашем случае кажется, что вы устанавливаете свои собственные значимые идентификаторы (например, гостиная, кухня), и вам следует изменить переменную propertyId
перед добавлением карты.избыточный, так как у вас уже есть атрибут (то есть имя), который описывает комнату. Поэтому используйте add()
и избегайте запросов на документ, который не существует, чтобы начать с:
final HashMap<String, Object> newRoom = new HashMap<>();
newRoom.put(roomName, room);
...
propertyRef.add(newRoom)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d(TAG, "DocumentSnapshot written with ID: " + documentReference.getId());
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error adding document", e);
}
});
Фактически, потому что вы былииспользуя whereEqualTo
, вы всегда выбирали ссылку на один и тот же документ и перезаписывали его содержимое. Просто используйте функциональность add()
и посмотрите в документах дополнительные примеры. Надеюсь, это поможет!