c# - C# FireStore,从文档中获取值
问题描述
我试图在 FireStore 中的文档中获取值,所以我这样做了。
Task<QuerySnapshot> docRef = db.Collection("Logs").GetSnapshotAsync();
foreach (DocumentSnapshot doc in await docRef){
DocumentSnapshot log = await db.Collection("Logs").Document(doc.Id).GetSnapshotAsync();
Console.WriteLine(log); // How to get the data in log?
}
问题是我不知道如何获取日志中的数据。我试过log["infoLog"]["name"]
了,但它不起作用。
如您所见,数据包含一个 Map (infoLog),其中包含不同的字符串、整数等。
什么是正确的方法?谢谢!
更新
试过这个
Task<QuerySnapshot> docRef = db.Collection("Logs").GetSnapshotAsync();
foreach (DocumentSnapshot doc in await docRef)
{
DocumentSnapshot log = await db.Collection("Logs").Document(doc.Id).GetSnapshotAsync();
foreach (KeyValuePair<string, object> pair in log.ToDictionary())
{
Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
}
}
但数据并没有按顺序排列。(因为我假设是异步的)
解决方案
如官方文档中所述,在查询数据时,您可以使用.OrderBy("FIELD_NAME")
or函数从 Firestore 端获取已订购的文档。这样你就可以得到它们已经订购了,所以你不需要在客户端订购它们。OrderByDescending("FIELD_NAME")
Task<QuerySnapshot> docRef = db.Collection("Logs").OrderBy("FIELD_NAME").GetSnapshotAsync();
foreach (DocumentSnapshot doc in await docRef)
{
DocumentSnapshot log = await db.Collection("Logs").Document(doc.Id).GetSnapshotAsync();
foreach (KeyValuePair<string, object> pair in log.ToDictionary())
{
Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
}
}
只需替换FIELD_NAME
为您要订购的字段的名称。如果您想按多个字段排序,也可以通过OrderBy()
多次使用来完成。
推荐阅读
- c# - Span 和 Memory 作为方法签名中数组的替代品?
- web - Facebook Graph API – 从 Instagram 页面获取网站 – 截屏视频
- javascript - 禁用:'{readOnly}' ExtJs 是什么意思
- android - 无法解决 com.google.firebase:firebase-crash:17.0.2
- html - 如何从 cfquery 结果中选中复选框
- java - 调用命令出错!使用 Maven Cargo 将战争部署到 WebSphere Liberty 服务器时
- mysql - 更改选择列会使查询变慢
- python - TypeError: schema 应该是 StructType 或 list 或 None
- python - python中方法优于函数的好处
- spring - Spring @Transactional 一次处理一个方法