代码之家  ›  专栏  ›  技术社区  ›  Zar E Ahmer

基于属性exist(键)的Firebase查询

  •  1
  • Zar E Ahmer  · 技术社区  · 6 年前

    正如我试图 userLikeCollection 作为

    questionID = true/false true means like and false means dislike . 如果这份文件不存在,就意味着它不存在 neither like nor disliked

    其中包括( 用户ID+问题ID )

    现在我想问一下这个问题是否像用户提出的那样。有没有办法做到这一点。

    db.collection("userLikeCollection").where(questionID ).exist() 
    

    或 读取具有属性字符串名称questionID的文档

    db.collection("userLikeCollection").whereStringProperty(questionID).exist()
    

    用户喜欢的文档 如下所示

    ( 用户ID+问题ID -questionID=true/false//其中questionID=每个文档的任何唯一id。

    编辑问题

    UserLikeDocument-1

    • blahblahQuestionIdOne=true;

    用户喜欢的文档-2

    • blahblahQuestionIdTwo=真;

    • blahblahQuestionIdThree=真;

    用户喜欢的文档-4

    • blahblahQuestionIdFour=真;
    1 回复  |  直到 6 年前
        1
  •  1
  •   Alex Mamo    6 年前

    现在我想问一下这个问题是否像用户提出的那样。有没有办法做到这一点。 db.collection(“userLikeCollection”).where(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 保存字符串类型的值,该值是您要查找的问题的实际id。

    (用户ID+问题ID)——>文档唯一ID-questionID=true/false//其中questionID=每个文档的任何唯一ID。

    这在Firestore中实际上是可能的,但前提是属性的名称不同 包含布尔值和 身份证件 属性,该属性保存字符串值。这可以通过链接两个来完成 whereEqualTo() 这样称呼:

    Query query = db.collection("userLikeCollection")
        .whereEqualTo("questionID", true)
        .whereEqualTo("id", id);
    

    根据你的评论:

    whereEqualTo(“questionID”,true)只有在它被喜欢的时候才会出现,但当它被不喜欢的时候才会出现。它不会被检索到

    没错。为了解决您的问题,根据有关 Query limitations :

    云火库 不支持 以下类型的查询:

    • != 条款在这种情况下,应该将查询拆分为大于查询和小于查询。例如 通过组合两个查询可以得到相同的结果集,一个是 其中的条款(“年龄”、“<”、”30”)和一个带有该条款 其中(“年龄”,”>“,30).

    换言之,这是不可能的 != (不等于)Firestore中的操作员。正如他们所说,您可以选择将查询拆分为 greater-than less-than 查询,然后它将工作得非常好。

    您还可以创建另一个如下所示的查询:

    Query query = db.collection("userLikeCollection").whereEqualTo("questionID", false);
    

    在这种情况下,您得到的问题具有 问题号 属性错误。

    编辑2:

    根据您编辑的问题,Firestore中没有基于动态id筛选文档的方法。也没有使用通配符的方法。属性应具有相同的名称。