Cloud Firestore: Как установить поле в документе на ноль - PullRequest
0 голосов
/ 07 января 2019

Я использую коллекцию документов, которые я использую для идентификации групп пользователей. Мое намерение состоит в том, чтобы заполнить поле идентификатора документа только идентификатором пользователя без других бесполезных полей в документах. Но после некоторого исследования, очевидно, невозможно иметь пустые документы.

Итак, мой вопрос - как установить (фиктивное) поле в документе на ноль, которое предположительно поддерживается Firestore согласно документации . Я работаю над этим как в Android, так и в Интернете, но полагаю, что код для любой платформы в порядке.

Обновление: я подтвердил, что простое помещение нуля в качестве поля в Web работает очень хорошо, однако, когда я пробую эквивалент в Android, как это:

Map<String, Object> emptyData = new HashMap<>();
emptyData.put("nullField", null);

Android Studio предупреждает меня:

Передача аргумента 'null' параметру, аннотированному как @ NotNull

Должен ли я продолжать принимать ноль или есть что-то еще, что я должен сделать?

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Решение, которое сработало для меня, так просто, как кажется, это установка поля, которое вы хотите обнулить, в пустую строку для строк и ноль для целых чисел. Ничего особенного, если вы хотите, вы можете проверить это, вручную установив значения в NULL в браузере документов FireStore FireStore.

this.itemDoc.update({item: ''});

или

this.itemDoc.update({item: null});

Это было сделано с помощью angularfire2, вот ссылка на документацию: https://github.com/angular/angularfire2/blob/master/docs/firestore/documents.md

0 голосов
/ 07 января 2019

Предполагая, что свойство userId имеет тип String, используйте следующий код для обновления всех пользователей userId = null:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference usersRef = rootRef.collection("users");
usersRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            List<String> list = new ArrayList<>();
            for (DocumentSnapshot document : task.getResult()) {
                list.add(document.getId());
            }

            for (String id : list) {
                rootRef.collection("Users").document(id).update("userId", null).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "Username updated!");
                    }
                });
            }
        }
    }
});

Если вы используете класс модели для своего пользователя, см. Мой ответ из этой записи .

0 голосов
/ 07 января 2019

В сети будет работать следующее:

        firebase.firestore().collection('abcd').doc("efgh").set({
            name: "...",
            nullField: null
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...