我正在使用 flutter firebase。我想要一个查询来向 firebase 集合中的所有文档添加键和值。
我尝试使用批量写入,但它添加了一个具有字段的新文档。但不合并到现有文档。
var db= Firestore.instance();
var batch = db.batch();
batch.setData(
db.collection("users").document(),
{"status": "Approved"}
);
当我尝试提供类似
document('id')
的文档 ID 时,它仅添加到该文档中。
我尝试了很多并观看了 YouTube 视频,但现在仍然找不到。请帮助我!
在应用程序的其中一个页面上创建一个虚拟按钮。按下按钮应在特定集合的所有文档中添加该字段。
在这里,我使用 IconButton 在“users”集合中添加一个名为“bio”的空字段。
您可以在文档中添加该字段后删除该按钮,因为这是您(开发人员)的问题,并且您的应用程序用户不需要该按钮。
IconButton(
onPressed: () {
FirebaseFirestore.instance
.collection('users')
.get()
.then(
(value) => value.docs.forEach(
(element) {
var docRef = FirebaseFirestore.instance
.collection('users')
.doc(element.id);
docRef.update({'bio': ''});
},
),
);
},
icon: Icon(Icons.done),
),
这是因为您使用的是 setData() 方法,而应该使用 updateData() 来更新:
var db= Firestore.instance();
var batch = db.batch();
batch.updateData(
db.collection("users").document(),
{"status": "Approved"}
);
让我解释一下我提出的解决方案。让您要添加的键为 x,您要添加的值为 3。将其手动添加到您的第一个文档中,然后使用此查询创建一个按钮并添加 500 件中的 500 件。
_addFieldAllCollection() {
WriteBatch batch = _fireStore.batch();
return _fireStore.collection('user').where('x', isEqualTo: 3)
.orderBy(FieldPath.documentId, descending: true).limit(1).get()
.then((onValue) {
print(onValue.docs.first.id);
_fireStore.collection('users').orderBy(FieldPath.documentId, descending: false).startAfterDocument(onValue.docs.first)
.limit(500).get()
.then((onValue2) {
print(onValue2.size);
for (var action in onValue2.docs) {
batch.update(action.reference, {
'x': 3,
});
}
return batch.commit().then((onValue) {
print('finish');
});
});
});
}