Firebase Firestore:是否可以对集合中的所有文档强制执行必填字段?

时间:2019-08-14 00:04:16

标签: firebase google-cloud-firestore

我正在为正在创建的应用程序手动添加数据。我必须将许多文档添加到集合中,所有文档都必须包含相同的5个字段。在Firebase控制台中创建新文档时,是否可以自动创建这些字段?还要强制执行所有具有这5个字段的文档(这样我就不会出错)?

此外,是否有比从Firebase控制台手动添加此数据更好的方法?例如通过JSON?

2 个答案:

答案 0 :(得分:1)

这里有两个独立的问题。两者都已经被回答过,但是从来没有一个问题,所以我在这里做。

您可以为集合中的新文档设置默认值吗?

这是不可能的。您已经将这些值明确写入了您创建的每个新文档中。

您可以强制集合中的新文档具有某些字段的值吗?

这可以通过使用Firebase的服务器端安全规则来实现。

例如,要确保文档具有field1field2field3的值,可以使用hasAll

allow write: if resource.data.keys().hasAll(['editor', 'admin']);

答案 1 :(得分:0)

在文档上设置默认值的一个选项是使用onCreate trigger来实现云功能,该功能将在创建每个新文档时查看它们,并在不存在默认值的情况下添加默认值。请注意,这并不是完美的,因为从创建对象到函数运行之间会有一些非零的时间,但是在某些情况下可能就足够了。

以下是这种功能的样子:

const functions = require('firebase-functions');

exports.setDefaultValueFirestore = functions.firestore.document('defaultDemo/{someDoc}')
    .onCreate(async (snap, context) => {
      if(!('defaultWanted' in snap.data())) {
        return snap.ref.set({
          'defaultWanted': 'my default value'
        }, {merge: true});  
      } else {
        return Promise.resolve();
      }
    });

这会将在defaultWanted中创建的任何文档上的/defaultDemo字段设置为my default value

但是,使用安全规则并让客户端始终按照@Frank的建议,始终提供所需的字段可能更稳定。