如果文档已存在 firestore 批处理,则阻止更新

我有一个程序在firestore上对集合执行批量写入。


我仅在集合中不存在 is 时才尝试编写文档,如果存在则跳过而不修改任何内容。


安全规则如下:


rules_version = '2';

service cloud.firestore {

  match /databases/{database}/documents {

    match /collection/{id} {

      allow create,delete: if request.auth.uid != null;

    }

  }

在测试工具上进行测试时,它按预期工作。我只被允许在这个集合中创建和删除文档。但是,当从程序运行时,如果已经存在,批量写入能够修改文档字段(在这种情况下为戳记)。


代码如下:


var batch = firestore.batch();

var docRef= firestore.collection("collection").doc(data.id);


batch.set(

    docRef,{

        id: data.id,

        stamp: new Date(),

    },

);

我错过了什么,或者做错了什么?


动漫人物
浏览 68回答 2
2回答

守着一只汪

您可以先检查文档是否存在,然后仅在不存在时才写入docRef.get().then(doc => {    if (!doc.exists) {        batch.set(docRef, {            id: data.id,            stamp: new Date(),        });    }});

胡子哥哥

从您的评论看来,您正在使用 Admin SDK 在 Node.js 环境中运行此代码。当您使用 Admin SDK 时,它会以提升的管理权限访问 Firebase,并绕过您指定的安全规则。有了这些知识,您的行为似乎正在按预期工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript