Firebase 在firestore上设置数据时转换为映射的字符串
我试图用一些特殊字符保存一个字符串,当我尝试这样做时,我的firestore将其保存为一个映射。我的意思是:Firebase 在firestore上设置数据时转换为映射的字符串,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我试图用一些特殊字符保存一个字符串,当我尝试这样做时,我的firestore将其保存为一个映射。我的意思是: Future<Null> setSeen(bool seen, bool existent) async { print(episode['title']); //Output: Episódio 5.5 Map<String, dynamic> episodeData = {episode['title'].toString(): seen};
Future<Null> setSeen(bool seen, bool existent) async {
print(episode['title']);
//Output: Episódio 5.5
Map<String, dynamic> episodeData = {episode['title'].toString(): seen};
if (existent) {
await Firestore.instance
.collection('users')
.document(uid)
.collection('seen')
.document(title)
.updateData(episodeData);
} else {
await Firestore.instance
.collection('users')
.document(uid)
.collection('seen')
.document(title)
.setData(episodeData);
}
}
Future-setSeen(bool-seen,bool-existing)异步{
印刷(插曲[标题]);
//产出:EPSódio 5.5
Map eposodedata={eposion['title'].toString():seen};
如果(存在){
等待Firestore.instance
.collection('用户')
.文件(uid)
.collection('seed')
.文件(标题)
.更新数据(情节数据);
}否则{
等待Firestore.instance
.collection('用户')
.文件(uid)
.collection('seed')
.文件(标题)
.setData(eposodedata);
}
}
上面的代码按如下方式保存我的数据:
这就是我想要保存的方式:
不幸的是,无法直接向firestore添加带有某些特殊字符的数据。例如,在您的例子中,
操作符会生成一个单独的嵌套对象,而不是一个常规字符串。一种可能的解决方案是使用提供键,但不幸的是,由于您的问题被标记为flatter
,firestore插件中没有对它的直接支持
另一种可能的解决方案是用其他允许的字符替换特殊字符。
例如,在您的情况下,您可以将它们替换为一组不同的有效字符,如DOT
或%24
或其他一些数字,以帮助您准确识别已替换的字符,并在提取时将其解析回原处
如果有帮助的话,这里有一个类似的RTDB线程的例子。不幸的是,不可能直接向firestore添加带有一些特殊字符的数据。例如,在您的例子中,
操作符会生成一个单独的嵌套对象,而不是一个常规字符串。一种可能的解决方案是使用提供键,但不幸的是,由于您的问题被标记为flatter
,firestore插件中没有对它的直接支持
另一种可能的解决方案是用其他允许的字符替换特殊字符。
例如,在您的情况下,您可以将它们替换为一组不同的有效字符,如DOT
或%24
或其他一些数字,以帮助您准确识别已替换的字符,并在提取时将其解析回原处
如果有帮助,这里有一个类似的RTDB线程。字段名中的
被解释为访问嵌套字段的请求。您可以通过将字符串包装在字段路径
对象中来防止这种情况,如下所示:,但我不知道如何在中执行此操作。请尝试将“\”放在点之前。字段名中的
被解释为访问嵌套字段的请求。你可以通过如下所示将字符串包装在字段路径
对象中来防止这种情况,但我现在不知道如何在中这样做。尝试将“\”放在点之前该链接非常有用,我只是做了一个函数来替换firebase的关键字符,现在它作为一个符咒工作。谢谢这个链接真的很有帮助,我只是做了一个功能来替换firebase的关键角色,现在它作为一个符咒工作。谢谢