Sembast-删除地图中的值

问题描述

我有一个存储地图对象的Sembast商店。如果要删除地图中的键,是否必须更新整个地图对象,或者是否有办法在不更新整个地图的情况下删除钥匙?这些文档仅显示如何删除记录,而没有显示如何删除字段。由于存在一种更新单个字段的方法,因此我认为对其他操作使用此功能很有意义。

示例:

// store a map that contains another map
int key = await petStore.add(db,{'name': 'fish',friends : {'cats' : 0,'dogs' : 0}});

// update just the cats attribute
await petStore.record(key).update{'friends.cats' : 2};

// Now I want to (if it is possible) remove the cats attribute without calling
await petStore.record(key).update({'name': 'fish',friends : {'dogs' : 0}})

解决方法

是否可以在不更新整个地图的情况下删除密钥?

与Firestore类似,您可以使用哨兵值FieldValue.delete删除字段。

使用点(.)甚至可以引用嵌套字段。以下是在示例中删除cats中的friends键的示例:

print(await petStore.record(key).get(db));
// prints {name: fish,friends: {cats: 0,dogs: 0}}

print(await petStore
    .record(key)
    .update(db,{'friends.cats': FieldValue.delete}));
// prints {name: fish,friends: {dogs: 0}}

有关更多信息,请查看有关updating fields的文档