Firestore - запрос, затем обновление - PullRequest
1 голос
/ 16 апреля 2019

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

Я пытался следовать этому руководству: https://www.youtube.com/watch?v=mYyPbfpoZeM И читать документацию.Оба не помогли.Другие темы в той же теме, ну, в общем, разные.

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

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

db.collection('objects').where('ID','==', ID ).get().then((snapshot) => {
        snapshot.docs.forEach( doc => {
            console.log('debug');
            console.log(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.Безуспешно.

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

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

db.collection('objects').where('ID', '==', ID).limit(1).get().then((query) => {  
        const thing = query.docs[0];                                                    
        const thingRef = thing.ref;                                                     
        var currVal = thing.data().value;                                               
        const newVal = currVal - minus;
        thingRef.update({value:newVal});
    });

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

0 голосов
/ 16 апреля 2019

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

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

objectRef.update({
    value: 0
}).then(function() {
    console.log("Document successfully updated!");
}).catch(function(error) {
    // The document probably doesn't exist.
    console.error("Error updating document: ", error);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...