具有两个值的Firebase实时数据库检查?

具有两个值的Firebase实时数据库检查?,firebase,flutter,dart,firebase-realtime-database,Firebase,Flutter,Dart,Firebase Realtime Database,我需要用两个值检查记录是否已经存在,以避免重复记录。我的数据库结构如下: movielist movies -M5RwyBsC1cwTzX4LU-A backdropPath: "https://image.tmdb.org/t/p/original/5BwqwxMEjeF..." genres: "Science Fiction, Drama" imDBid:

我需要用两个值检查记录是否已经存在,以避免重复记录。我的数据库结构如下:

movielist
         movies
              -M5RwyBsC1cwTzX4LU-A
               backdropPath: "https://image.tmdb.org/t/p/original/5BwqwxMEjeF..."
               genres: "Science Fiction, Drama"
               imDBid: "tt2935510"
               posterPath: "https://image.tmdb.org/t/p/original/xBHvZcjRiWy..."
               releaseDate: "2019"
               title: "Ad Astra"
               userId: "SZ7zU6toVcSSablbnZif8n4MTIb2"
               voteAverage: "6.6"
               watched: false
因此,在添加之前,我需要检查具有userId的用户和具有imDBid的电影是否存在。如果有更有效的方法,您也可以建议任何类型的db结构

更新代码(已编辑):


您可以将两个where子句链接在一起

Firestore.instance.collection("movies)
     .where("userId", isEqualTo: "Some user Id")
     .where("imDBid isEqualTo: "Some imDBid")

因为您使用的是firebase实时数据库,所以唯一的方法是将这两个属性合并为一个

因此,您将获得以下信息:

movies
  randomid
    userId_imbdId  : valueId_valueId

然后你可以检查
userId\u imbdId
是否等于userId\u movieid

我使用的是firebase auth和实时数据库,所以我没有在任何地方实现firestore,我尝试了FirebaseDatabase.instance,但它没有集合,也没有我想的地方。这是制作唯一密钥的实用方法,但我在ui中使用数据,也许我会保持我的用户id不变,并像您提到的那样修改imdbId值,这样这个值就可以通过split或.replaceAll(userId,“”)之类的字符串操作来实现。还有一个问题,如何通过这个查询避免重复记录?你可以添加这个属性并保留另外两个属性。为了防止重复,您需要使用一个查询示例:
orderByChild(“userId\u imbdId”).equalTo(valueId\u valueId)
如果您得到数据,它就意味着它存在;如果您没有得到数据,它就不存在谢谢,但它永远不会为null,我想,我试过(print(FirebaseDatabase.instance.reference().orderByChild(“imDBid”).equalTo(“any id”)!=null)即使添加或不添加id,它也会返回true。我想我需要对此进行更多的研究。我的主要问题是我有一个主页,上面列出了db中属于userid的所有电影,但当我转到detailpage时,它是从另一个将来的函数构建的,我无法以某种方式连接这两个。我试图在我的“添加到”中创建一个子futurebuilder按钮来控制它的图标形状和onpressed操作,但还无法实现。与本地数据库逻辑不同。您需要使用
once()
它返回一个未来我正在阅读这篇文章,它的信息非常丰富谢谢,如果我不打扰你的话,你能检查我问题中编辑的部分吗。我知道当我这样做时,如果来自第一个未来的snapshot.data.imdbid不等于数据库“imdbid”子项的任何记录,那么快照(第二个未来的)必须为空,但当我尝试这样做时,就像我添加到问题图标中的更新代码一样,永远不会随if-else情况而更改。只是尝试理解我使用更改图标的逻辑,如果我可以更改图标,我可以根据此数据更改onpressed操作,以避免重复记录。
movies
  randomid
    userId_imbdId  : valueId_valueId