我正在快速开发一个应用程序,我想运行一个查询以确定Firestore文档中的数组是否为空。有没有办法做到这一点?
这是我在firestore中构建的数据的图片。
我知道有一个 arrayContains方法,但是我不确定如何检查空数组。这是我当前的代码。
_postsStream = await _firestore
.collectionGroup('posts')
.where('timestamp', isGreaterThanOrEqualTo: _start)
.where('timestamp', isLessThanOrEqualTo: _end)
.where('problems', arrayContains: )
.snapshots();
我离开了arrayContains:暂时是空的。请告知我如何实现此功能。提前致谢!
答案 0 :(得分:6)
一个空数组默认为[],因此可以通过执行以下操作: 不要在方括号中使用''
final _database = Firestore.instance;
return _database
.collection('arrays')
.document(arrId)
.where('array', isEqualTo: [])
// .where('array', isNull: true) can be used to check if it's null
.snapshots()
.map(_itemListFromSnapshot);
答案 1 :(得分:1)
无法通过Firestore查询检查数组是否为空。
但是,您可以按照以下步骤操作:
_postsStream = await _firestore.collectionGroup('posts')
.where('timestamp', isGreaterThanOrEqualTo: _start)
.where('timestamp', isLessThanOrEqualTo: _end)
.snapshots();
DocumentSnapshot
并检查problems
数组是否为空。答案 2 :(得分:1)
您目前无法在Firestore中执行此操作。 你能做的就是。
创建一个单独的属性hasProblems,该属性默认为false。
如果用户尝试注册问题,请检查标志hasProblems。
通过这种方式可以实现您想要的目标-
firebase-tools
也许您可以有其他更好的解决方案,但这是我想到的一个解决方案。 您可以按照@ mubin986给出的解决方案进行操作,但是一旦列表越来越大,就会影响性能。 干杯,希望能帮上忙。