Firebase: как определить дубликат у разных родителей

#java #android #firebase #firebase-realtime-database

#java #Android #firebase #firebase-realtime-database

Вопрос:

У меня есть следующий код для отклонения дубликатов в Firebase «Admin»:

   public static void checkForDuplicateTweet()
  {
    Query adminQuery = dbRefAdminFeed.orderByChild("tweetStatusID").equalTo(TweetData.tweetStatusID);
    Query feedQuery = dbRefFeed.orderByChild("tweetStatusID").equalTo(TweetData.tweetStatusID);

    adminQuery.addValueEventListener(new ValueEventListener()
    {
      @Override
      public void onDataChange(@NonNull DataSnapshot dataSnapshot)
      {
        if (dataSnapshot.exists())
        {
          boolean isFirst = true;

          for (DataSnapshot postSnapshot : dataSnapshot.getChildren())
          {
            TweetData tweetData = postSnapshot.getValue(TweetData.class);

            if (isFirst)
            {
              isFirst = false;
            }
            else
            {
              removeTweetFromFirebase(Objects.requireNonNull(tweetData).tweetKey);
            }
          }
        }
      }

      @Override
      public void onCancelled(@NonNull DatabaseError databaseError)
      {
      }
    });
  }
  

Как мне проверить другого родителя, чтобы узнать, существует ли tweetStatusID под этим родителем со следующей структурой?

ссылка на скриншот firebase

Ответ №1:

Вы на полпути. Чтобы проверить, существует ли значение для обоих родителей, вы должны выполнить запрос для каждого родителя. Итак, просто запустите запрос dbRefFeed , как только вы определите, что значение существует dbRefAdminFeed .

 Query adminQuery = dbRefAdminFeed.orderByChild("tweetStatusID").equalTo(TweetData.tweetStatusID);
Query feedQuery = dbRefFeed.orderByChild("tweetStatusID").equalTo(TweetData.tweetStatusID);

adminQuery.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(@NonNull DataSnapshot adminSnapshot) {
    if (adminSnapshot.exists()) {
      feedQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot feedSnapshot) {
          if (feedSnapshot.exists()) {
              ...
          }
        }
    }
  }