首页 > 解决方案 > 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);

                }
            }

但数据并没有按顺序排列。(因为我假设是异步的)

标签: c#google-cloud-firestore

解决方案


如官方文档中所述,在查询数据时,您可以使用.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()多次使用来完成。


推荐阅读