我正在为正在创建的应用程序手动添加数据。我必须将许多文档添加到集合中,所有文档都必须包含相同的5个字段。在Firebase控制台中创建新文档时,是否可以自动创建这些字段?还要强制执行所有具有这5个字段的文档(这样我就不会出错)?
此外,是否有比从Firebase控制台手动添加此数据更好的方法?例如通过JSON?
答案 0 :(得分:1)
这里有两个独立的问题。两者都已经被回答过,但是从来没有一个问题,所以我在这里做。
这是不可能的。您已经将这些值明确写入了您创建的每个新文档中。
这可以通过使用Firebase的服务器端安全规则来实现。
例如,要确保文档具有field1
,field2
和field3
的值,可以使用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的建议,始终提供所需的字段可能更稳定。