Firestore - запрос, затем обновление

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

Я пытался следовать этому руководству: https://thewikihow.com/video_mYyPbfpoZeM И читайте документацию. Оба не помогли. Другие темы в той же теме, ну, разные.

У меня есть база данных объектов, которые имеют уникальный идентификатор, хранящийся как целое число. У меня есть HTML-форма для получения идентификатора в качестве пользовательского ввода и приведенный ниже запрос для получения соответствующего объекта.

Я попробовал это. Запрос сработал, обновление - нет.

db.collection('objects').where('ID','==', ID ).get().then((snapshot) => {
        snapshot.docs.forEach( doc => {
            console.info('debug');
            console.info(doc.data().ID);
        })
    });

Я все еще новичок в firebase и js, поэтому, пожалуйста, простите меня, если мой код совершенно неверен. В настоящее время я застрял с этим:

db.collection('objects').where('ID','==', ID ).get().then((doc) => {
    console.table(doc);
});

Который до сих пор не работает.

Для второго фрагмента я в настоящее время получаю неразборчивую таблицу, в которой я не могу найти объект, который искал.

Как обновить одно значение в одном документе?

Обновлено: я забыл свои попытки реализации функции обновления. Я попробовал doc.update({value:0}) внутри цикла for в первом фрагменте, который дал doc.update is not a function. Аналогично для doc.data().update(...).

Во втором фрагменте я в основном пытался увидеть, что мне вернулось, и запускал варианты вышеупомянутой функции uodate. Без успеха.

где ваш код обновления?

Nadhir Falta 16.04.2019 20:45

@NadhirFalta отредактировано, спасибо, что указали, что я упустил главное.

Tharrry 16.04.2019 21:11

вы используете AngularFirestore AngularFirestore? И знаете ли вы что-нибудь внутри этого цикла, кроме обновления значения?

Nadhir Falta 16.04.2019 21:17

AngularFirebase, не то чтобы я знаю. Я не знаю, что бы это значило. Должен ли я знать делать что-либо внутри цикла? Я не хочу делать что-либо еще в цикле. Пока только ведение журнала консоли для отладки.

Tharrry 16.04.2019 21:24

Могу я увидеть ваш конструктор?

Nadhir Falta 16.04.2019 21:25

На мой взгляд, конструктор относится к объектно-ориентированному программированию, верно? Я не знаю, что вы имеете в виду в отношении не-OO js.

Tharrry 16.04.2019 21:28

Хорошо, я добавил ответ, попробуй

Nadhir Falta 16.04.2019 21:34

это сработало для вас?

Nadhir Falta 16.04.2019 22:10

@NadhirFalta Нет, добавил комментарии о том, почему

Tharrry 17.04.2019 12:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
13
9
9 299
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

попробуй это:

var objectRef= db.collection("objects").doc(ID);

objectRef.update({
    value: 0
}).then(function() {
    console.info("Document successfully updated!");
}).catch(function(error) {
    // The document probably doesn't exist.
    console.error("Error updating document: ", error);
});

Либо я делаю const ID = parseInt(userInput); и получаю argument must be of type string but is int, либо делаю это без parseInt и не возвращает никаких объектов

Tharrry 16.04.2019 22:48

Кроме того, мне нужно, чтобы новое value основывалось на старом значении, как мне это сделать? Можно просто сказать .update({value: value-othervalue})?

Tharrry 16.04.2019 22:48

@Harri думает, что проблема в вашем пользовательском вводе, чего вы ожидаете от пользователя? и как выглядят ваши идентификаторы firestoreI?

Nadhir Falta 17.04.2019 16:10

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

Tharrry 17.04.2019 17:50
Ответ принят как подходящий

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

db.collection("users").where("name", "= = ", somename).limit(1).get().then(query => {
                console.info(query);
                const thing = query.docs[0];
                console.info(thing.data());
                let tmp = thing.data();
                tmp.current_game_play = tmp.current_game_play + 1;
                console.info(tmp);
                thing.ref.update(tmp);
            });

Поэтому я использую where, чтобы получить объект Query, использую get, чтобы получить querySnapshot внутри then промиса, использую docs[0], чтобы получить первый (и единственный) documentSnapshot и, наконец, ref, чтобы получить ссылку, которая делает все это обновляемый позже.

ссылка на документы, в которых говорится о ref из querysnapshotdocumentgoogleapis.dev/nodejs/firestore/latest/…

Jim Factor 01.02.2020 14:08

Другие вопросы по теме