问题描述
我对Nosql数据库非常陌生,我只想问一个关于使用sembast的简单问题!我正在开发一个带有Flutter的非常简单的应用程序,我想将对象的数组“列表”中的“名称”等于1。
{
"id": 12345,"list": [{
"name": 1,"element": [{
"nameItem": "a"
},{
"nameItem": "b"
}]
},{
"name": 2,"element": []
},{
"name": 3,"element": []
}]
}
{
"name": 1,"element": [{
"nameItem": "a"
},{
"nameItem": "b"
}]
}
我已经编写了这段代码,但是它不起作用:我不明白如何在json树中使用子标签作为键进行查询。
Future<List<ElementList>> getElementFromList(int name) async{
final finder = Finder(filter: Filter.equals("name",name));
final recordSnapshot = await _elementList.find(await _db,finder: finder);
return recordSnapshot.map((snapshot){
final elementObj = ElementList.fromJson(snapshot.value);
return elementObj;
}).toList();
}
这使我返回[]。我该如何解决这个问题? 预先谢谢你!
解决方法
Sembast查询允许过滤记录,而不是记录的一部分。如果您提到的对象是完整记录,则可以:
- 使用自定义过滤器自己对数据库中的每个记录执行查找(检查
list
字段中的每个项目`) - 检索记录时,提取项目(执行类似的Map / List操作)