如何使用Flutter检查Firestore中多个文档中的特定值

database list firebase flutter 匿名 | 2020-08-01 20:14:20


我正在尝试检查我的集合中是否有文档包含具有特定时间的值。但我做错了什么。
我正在寻找一种方法来检查我的收藏中是否有任何文档包含“日期时间。现在().year”,在“CreatedAt”字段中。
  List documents = [];
@override
void initState() {
Firestore.instance.collection('Collection').getDocuments().then((snapshot) {
List allDocs = snapshot.documents;
List yearDocs = allDocs.where((e) => e.data['createdAt'].toDate.year() == DateTime.now().year).toList();
// iterate over your yearDocs, and add the data to documents
yearDocs.forEach((item){
documents.add(item);
});
});
super.initState();
}

我想设置一个列表,其中“Field”包含日期时间。现在().年”。然后我检查列表是否有效。
documents.length >= 1? Container(
child: Text('works'),
) : SizedBox(),






6 答案



答案3.0
您的答案在于以下
DataSnapshot
数组获取
createdAt
元素,该数组是
allDocs

有一个catch,它以Firebase时间戳实例格式引入时间戳,即=>
TimeStamp(seconds=int, nanoseconds=int)
,例如:
Timestamp(seconds=1593504718, nanoseconds=706167000)

我们关心的是获取
seconds
,它只不过是一个时间戳
使用秒,从中获取
Year
,并将其存储在您的
yearDocs

为了获得年份形式的数据,我们这样做

我们可以通过这样做来获得年份
<10]

将所有这些组合起来,让我们编码:
  List documents = [];
@override
void initState() {
Firestore.instance.collection('Collection').getDocuments().then((snapshot) {
List allDocs = snapshot.documents;

// now here we get the data in respect of year
List yearDocs = allDocs.where((e) =>
DateTime.fromMillisecondsSinceEpoch(e.data["createdAt"].seconds * 1000).year == DateTime.now().year).toList();

print(yearDocs.length);

// iterate over your yearDocs, and add the data to documents
yearDocs.forEach((item){
documents.add(item);
});
print(documents.length);
});
}

其余都可以,您可以按照
documents.length
填充数据。如果这对你有帮助,请告诉我。:)这也有助于您深入了解=>DateTime类

2020-08-03 01:20:04
匿名


我想你错过了
data

yearDocs = allDocs.where((e) => e.data['createdAt'].toDate.year() == DateTime.now()).toList();

2020-08-03 01:20:10
匿名


答案3.0
您的答案在于以下
DataSnapshot
数组获取
createdAt
元素,该数组是
allDocs

有一个catch,它以Firebase时间戳实例格式引入时间戳,即=>
TimeStamp(seconds=int, nanoseconds=int)
,例如:
Timestamp(seconds=1593504718, nanoseconds=706167000)

我们关心的是获取
seconds
,它只不过是一个时间戳
使用秒,从中获取
Year
,并将其存储在您的
yearDocs

为了获得年份形式的数据,我们这样做

我们可以通过这样做来获得年份
<10]

将所有这些组合起来,让我们编码:
  List documents = [];
@override
void initState() {
Firestore.instance.collection('Collection').getDocuments().then((snapshot) {
List allDocs = snapshot.documents;

// now here we get the data in respect of year
List yearDocs = allDocs.where((e) =>
DateTime.fromMillisecondsSinceEpoch(e.data["createdAt"].seconds * 1000).year == DateTime.now().year).toList();

print(yearDocs.length);

// iterate over your yearDocs, and add the data to documents
yearDocs.forEach((item){
documents.add(item);
});
print(documents.length);
});
}

其余都可以,您可以按照
documents.length
填充数据。如果这对你有帮助,请告诉我。:)这也有助于您深入了解=>DateTime类

2020-08-02 14:40:58
匿名


我想你错过了
data

yearDocs = allDocs.where((e) => e.data['createdAt'].toDate.year() == DateTime.now()).toList();

2020-08-02 14:41:19
匿名


我想你错过了
data

yearDocs = allDocs.where((e) => e.data['createdAt'].toDate.year() == DateTime.now()).toList();

2020-08-01 20:14:22
匿名


答案3.0
您的答案在于以下
DataSnapshot
数组获取
createdAt
元素,该数组是
allDocs

有一个catch,它以Firebase时间戳实例格式引入时间戳,即=>
TimeStamp(seconds=int, nanoseconds=int)
,例如:
Timestamp(seconds=1593504718, nanoseconds=706167000)

我们关心的是获取
seconds
,它只不过是一个时间戳
使用秒,从中获取
Year
,并将其存储在您的
yearDocs

为了获得年份形式的数据,我们这样做

我们可以通过这样做来获得年份
<10]

将所有这些组合起来,让我们编码:
  List documents = [];
@override
void initState() {
Firestore.instance.collection('Collection').getDocuments().then((snapshot) {
List allDocs = snapshot.documents;

// now here we get the data in respect of year
List yearDocs = allDocs.where((e) => DateTime.fromMillisecondsSinceEpoch(e.data["createdAt"].seconds * 1000).year == DateTime.now().year).toList();

print(yearDocs.length);

// iterate over your yearDocs, and add the data to documents
yearDocs.forEach((item){
documents.add(item);
});
print(documents.length);
});
}

其余都可以,您可以按照
documents.length
填充数据。如果这对你有帮助,请告诉我。:)这也有助于您深入了解=>DateTime类

2020-08-01 20:14:26
匿名


World is powered by solitude
备案号:湘ICP备19012068号