Теперь я хочу спросить, нравится ли этот вопрос пользователю.Есть ли способ добиться этого.db.collection ("userLikeCollection"). где (questionID) .exist ()
Да, есть.Чтобы решить эту проблему, вы должны использовать запрос и get()
вызов.В коде это выглядит так:
Query query = db.collection("userLikeCollection").whereEqualTo("questionID", true);
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
if (document.exists()) {
Boolean questionID = document.getBoolean("questionID");
}
}
}
}
});
В этом коде запрос поможет вам найти все документы, в которых свойство questionID
будет содержать значение true
и использование document.exists()
поможет найти, существует ли этот документ на самом деле.
или прочитать тот документ, который имеет имя свойства строки questionID db.collection ("userLikeCollection"). whereStringProperty (questionID) .exist ()
В этом случае вам также следует использовать запрос, но вместо передачи логического значения методу whereEqualTo()
вы должны передать строковую строку:
Query query = db.collection("userLikeCollection").whereEqualTo("questionID", id);
, в которой содержится id
значение типа String, которое является фактическим идентификатором вопроса, который вы ищете.
(userID + questionID) -> Уникальный идентификатор документа - questionID = true / false // где questionID = anyуникальный идентификатор для каждого документа.
Это на самом деле возможно в Firestore, но только если имена свойств различаются, скажем, questionID
, который содержит логическое значение и и id
proPerty, который содержит строковое значение.Это можно сделать, связав два whereEqualTo()
звонка так:
Query query = db.collection("userLikeCollection")
.whereEqualTo("questionID", true)
.whereEqualTo("id", id);
Редактировать:
Согласно вашему комментарию:
whereEqualTo («questionID», true) появляется только в том случае, если ему нравится, но когда он не нравится. Он не будет извлечен
Это правильно.Чтобы решить вашу проблему, в соответствии с официальной документацией относительно ограничения запросов :
Cloud Firestore не поддерживает следующие типы запросов:
Запросы с предложением ! = .В этом случае вы должны разделить запрос на запрос больше, чем запрос и меньше.Например, хотя условие запроса where ("age", "! =", "30") не поддерживается, вы можете получить один и тот же набор результатов, комбинируя два запроса, один с предложением где ("age", "<"," 30 ") и один с предложением где (" age ","> ", 30).
То есть, другими словами, нет !=
(не равно) оператор в Firestore.Как говорится, у вас есть возможность разделить ваш запрос на greater-than
и less-than
запрос, и тогда он будет отлично работать.
Вы также можете создать еще один запрос, который выглядит следующим образом:
Query query = db.collection("userLikeCollection").whereEqualTo("questionID", false);
В этом случае вы получите вопрос со свойством questionID
false.
Edit2:
В соответствии с вашим отредактированнымвопрос, в Firestore нет способа фильтровать документы по динамическому идентификатору.Также нет возможности использовать wildcars.Свойства должны иметь одинаковые имена.