firebase 如何检查Firestore数据库文档中是否存在字段?

lstz6jyr  于 2023-06-24  发布在  其他
关注(0)|答案(6)|浏览(144)

我的Firestore数据库:

我想检查是否有一个名为“EmailOf@Follower.com“的字段存在于文档“D9GeGdTxarFruuuQklEO”中,只,不签入所有文档,无论如何在firestoreFlutter中这样做?

7fyelxc5

7fyelxc51#

来自cloud_firestore:^0.14.0之前,您可以通过以下操作来检查documentSnapshot中是否存在特定字段:

CollectionReference users = FirebaseFirestore.instance.collection('users');
var doc = await users.doc(id).get();
 if(doc.exists){
     Map<String, dynamic> map = doc.data();
     if(map.containsKey('field')){// Replace field by the field you want to check.
       var valueOfField = map['field'];
     }
   }

或者你也可以这样做:

await _users.doc(id).get().then((doc){
   if(doc.exists){
     doc.data().forEach((key, value) { 
       if(key == 'field'){
         var valueOfField = value;
       }
     });
   }
});
kgqe7b3p

kgqe7b3p2#

如果你想了解一个文档的内容,你必须阅读它并检查它的字段。不阅读文档就检查字段没有特殊操作。

wj8zmpe1

wj8zmpe13#

使用.where(yourField, '==', null)的问题是,您不知道yourField是否实际存在并具有null值,还是不存在
如果yourField是你想知道它是否存在的字段,

const orderRef = db.collection("YOUR_COLLECTION")
        const docSanpshots = await orderRef.get()
        docSanpshots.docs.forEach((doc) => {
            if (doc.get('yourField') === undefined) {
               // DO SOMETHING HERE when yourField doesn't exist
            }
        })

请注意yourField是用引号括起来的

yacmzcpb

yacmzcpb4#

我得到了另一个解决方案上面没有提到的谁没有与他的其他解决方案。其思想是将Object数据转换为Map类型。
所以首先你需要导入这个

import 'dart:convert';

在你的dart文件中,然后我们将编码对象数据,以获得它作为Map类型

jsonEncode(documentSnapshot.data()).contains('your_field')
gzszwxb4

gzszwxb45#

您可以采取额外的步骤,在创建文档时向每个文档添加docId字段,然后将其用作第二个where条件。* 如果这是内置的,那就太好了,但如果需要的话,实现这个解决方案也不是什么大问题 *

bool isSomeFieldSetForUser(String userDocId) {

  final userDb = db.collection('users');
  final firestoreQuery = userDb
      .where('docId', isEqualTo: userDocId)
      .where('someField', isNotEqualTo: null);

  final collection = await firestoreQuery.get();

  if (collection.docs.isEmpty) {
    return false;
  }

  final doc = collection.docs[0];
  return true;
}
p5cysglq

p5cysglq6#

您可以使用密钥名称检查是否存在undefined

const orderSnap = await db.collection("YOUR_COLLECTION").where("user_id","==","01").get();
        
            if (orderSnap.data().yourField == undefined) {
               // DO SOMETHING HERE when yourField doesn't exist
            }

相关问题