如何遍历Cloud Firestore中特定字段值匹配的文档并获取字段值?
解决CrossCloudFirestore查询结果遍历问题
你遇到的问题是因为GetAsync()返回的是QuerySnapshot对象,它本身不是可直接遍历的集合,需要访问其Documents属性来获取所有匹配的文档快照列表。另外注意你的集合名拼写错误:myCollcetion应该修正为myCollection,这也可能导致查询异常。
以下是修正后的完整代码示例:
// 执行查询,获取QuerySnapshot var querySnapshot = await CrossCloudFirestore.Current .Instance .Collection("myCollection") // 修正拼写错误 .WhereEqualsTo("field", variable) .GetAsync(); // 遍历Documents集合中的每个DocumentSnapshot foreach (var docSnapshot in querySnapshot.Documents) { // 方式1:直接读取单个字段 // 替换"targetField"为你要获取的字段名,<string>替换为对应字段的类型(如<int>、<bool>等) var targetValue = docSnapshot.Get<string>("targetField"); // 方式2:将文档映射为自定义实体类(推荐,代码更易维护) // 先定义与文档结构匹配的实体类,比如: // public class MyDocumentModel // { // public string field { get; set; } // public string targetField { get; set; } // // 其他字段... // } var docModel = docSnapshot.ToObject<MyDocumentModel>(); if (docModel != null) { // 使用实体类的属性 var modelValue = docModel.targetField; } // 可选:获取文档ID var documentId = docSnapshot.Id; }
关键说明:
- QuerySnapshot.Documents:这是包含所有查询结果的
List<DocumentSnapshot>,是真正可遍历的集合。 - DocumentSnapshot.Get
() :针对单个字段的读取,需要指定字段名和返回值类型,类型不匹配时会抛出异常。 - DocumentSnapshot.ToObject
() :将整个文档数据自动映射到自定义类,需要确保类的属性名与文档字段名一致(支持大小写兼容,或通过特性指定映射关系)。
内容的提问来源于stack exchange,提问作者Costas
相关产品推荐
相关产品推荐

