首页 > 解决方案 > 使用带有颤振的sembast(NoSql)查询问题

问题描述

我是 NoSql 数据库的新手,我只想问你一个关于 sembast 使用的简单问题!我正在用颤振开发一个非常简单的应用程序,我想在数组“列表”中获取对象,其中“名称”等于 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();
  }

这返回了我 []。我该如何解决这个问题?先感谢您!

标签: androidflutterdartnosqlsembast

解决方案


Sembast 查询允许过滤记录,而不是记录的一部分。如果您提到的对象是整条记录,您可以:

  • 使用自定义过滤器自己对数据库中的每条记录执行查找(检查字段中的每个项目list
  • 检索记录时,提取项目(执行类似的 Map/List 操作)

查看复杂过滤的问题


推荐阅读