Я хочу вернуть элемент с определенным идентификатором и выполнить над ним операцию обновления. Мой запрос дает правильный результат, но не позволяет мне его обновить.
Я пытался следовать этому руководству: 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. Без успеха.
@NadhirFalta отредактировано, спасибо, что указали, что я упустил главное.
вы используете AngularFirestore AngularFirestore? И знаете ли вы что-нибудь внутри этого цикла, кроме обновления значения?
AngularFirebase, не то чтобы я знаю. Я не знаю, что бы это значило. Должен ли я знать делать что-либо внутри цикла? Я не хочу делать что-либо еще в цикле. Пока только ведение журнала консоли для отладки.
Могу я увидеть ваш конструктор?
На мой взгляд, конструктор относится к объектно-ориентированному программированию, верно? Я не знаю, что вы имеете в виду в отношении не-OO js.
Хорошо, я добавил ответ, попробуй
это сработало для вас?
@NadhirFalta Нет, добавил комментарии о том, почему



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


попробуй это:
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 и не возвращает никаких объектов
Кроме того, мне нужно, чтобы новое value основывалось на старом значении, как мне это сделать? Можно просто сказать .update({value: value-othervalue})?
@Harri думает, что проблема в вашем пользовательском вводе, чего вы ожидаете от пользователя? и как выглядят ваши идентификаторы firestoreI?
пользовательский ввод изначально является строкой. Я могу легко привести его к int. Внутри пожарного хранилища идентификаторы представляют собой целые числа. В качестве альтернативы, есть ли простой способ получить идентификаторы, сгенерированные firestore?
Мне удалось заставить его работать, изучив часть документации 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/…
где ваш код обновления?