使用linkMany关联查询未达预期:空Notes的集合未返回
解决ObjectBox查询不含指定Note的集合时遗漏空集合的问题
你的问题不是ObjectBox的bug,是查询条件的逻辑没覆盖到空集合场景。
问题原因
你当前用linkMany的写法,只会筛选存在关联Note且这些Note里没有指定id的集合。而空集合(没有关联任何Note的NoteCollectionEntity)因为没有关联记录,根本不会进入linkMany的匹配逻辑,所以被过滤掉了。
解决方案
需要把查询条件拆成两部分,用逻辑或(or)组合,同时覆盖两种符合要求的场景:
- 集合关联的Notes里没有指定id的Note
- 集合没有关联任何Note(notes为空)
修改后的查询代码如下:
final box = await bloc.repository.noteCollectionBox; // 组合两个条件:要么不含指定Note,要么是空集合 final query = box.query( Condition.or( // 条件1:关联的Notes中不存在指定id的Note NoteCollectionEntity_.notes.link(NoteEntity_.id.notEquals(note.id)), // 条件2:没有关联任何Note NoteCollectionEntity_.notes.isEmpty(), ), ).build(); final collections = query.find(); query.close(); print('collections: $collections'); for (final collection in collections) { print('collection: ${collection.name}'); }
补充说明
NoteCollectionEntity_.notes.link(...)等价于你之前用的linkMany写法,用来筛选关联Notes满足子条件的集合NoteCollectionEntity_.notes.isEmpty()专门用来匹配没有关联任何Note的空集合- 用
Condition.or把两个条件组合,就能同时获取两类符合要求的集合
内容的提问来源于stack exchange,提问作者Adithya
相关产品推荐
相关产品推荐

