Flutter cloud_firestore Filter.or使用DocumentReference抛出无效参数错误

问题描述 投票:0回答:1

我们正在使用

cloud_firestore
Flutter 包(刚刚升级到 4.9.3),并且在将 Filter.or 与 arrayContains: documentReference 一起使用时遇到错误。具体错误信息是
Invalid argument: Instance of '_JsonDocumentReference'

这是查询:

.where(
  Filter.and(
    Filter(PostKeys.type, whereIn: [PostType.creation.name, PostType.combination.name]),
    Filter(PostKeys.visibility, isEqualTo: ContentVisibility.public.name),
    Filter.or(
      Filter(PostKeys.ingredients, arrayContains: itemReference),
      Filter(PostKeys.tags, arrayContains: itemReference)
    )
  )
)
.orderBy(PostKeys.created, descending: true)
.limit(queryLimit);

结果

Invalid argument: Instance of '_JsonDocumentReference'

即使我们删除 Filter.or 并只包含 Filter.and 中的语句之一,我们也会得到相同的错误:

.where(
  Filter.and(
    Filter(PostKeys.type, whereIn: [PostType.creation.name, PostType.combination.name]),
    Filter(PostKeys.visibility, isEqualTo: ContentVisibility.public.name),
    Filter(PostKeys.ingredients, arrayContains: itemReference),
  )
)
.orderBy(PostKeys.created, descending: true)
.limit(queryLimit);

结果

Invalid argument: Instance of '_JsonDocumentReference'

cloud_firestore
版本
4.9.2
的变更日志状态为“FIX(firestore):允许在过滤器查询中使用 DocumentReference”,但它似乎不起作用,我们不确定为什么。

作为参考,我们在 Prototype 环境中使用 Javascript 运行相同的查询,并且运行良好:

pq = query(collection(db, "posts"), 
  and(
    where('type', "in", ['creation','combination']),
    where("visibility", "==", CONSTANTS.visibility.public), 
    or(
      where('ingredients', "array-contains", itemRef), 
      where('tags', "array-contains", itemRef)
    ) 
  ), 
  orderBy("created","desc"), 
  limit(queryLimit)
);

结果:在 Javascript (WebV9) 中运行良好

flutter firebase google-cloud-firestore
1个回答
0
投票

已解决

我能够使查询正常工作。根据 @Frank 对我原来问题的评论,我检查了 DocumentReference 的初始化,结果是

final itemReference = _itemsCollection.doc(item.reference.id);
。相反,我只是将现有的
item.reference
传递到查询中并且它起作用了。不知道为什么会产生影响,但确实如此。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.