我有一个firestore文档要更新。这是我的密码-
admin.firestore().collection('testResult').doc(`${testId}`).set(
{
name: userName,
email: email,
},
{ merge: true },
);
我正在对“merge:true”对象使用“set”方法。因为如果不存在,我想创建一个新文档,如果存在,我想更新数据。
我试图更新的文档正在被我发送的新属性重写,而不是将数据附加到现有文档中。我读到,使用{merge:true}将传入数据与当前数据合并,但这不起作用。我的整个文档正在被新数据替换。
这是我第一次创建文档时的firestore集合-
这是我更新时的同一份文件-
我是按照弗兰克·范·帕夫伦的建议来做的。如果将来有人需要,这里有正确的代码-
admin
.firestore()
.collection('testResult')
.doc(`${testId}`)
.get()
.then(doc => {
if (doc.exists) {
admin
.firestore()
.collection('testResult')
.doc(`${testId}`)
.update({
data: admin.firestore.FieldValue.arrayUnion(
{ userName, email }
),
});
} else {
admin
.firestore()
.collection('testResult')
.doc(`${testId}`)
.set({
data: [{ userName, email }],
});
}
return;
})
.catch(error => console.log(error));
首先我检查文档是否存在。如果它不存在,那么我将创建一个新文档并保存一个包含带有我的值的数组的对象。如果它存在,那么我将更新数组。
合并
不会创建新字段,它允许您添加不存在的新字段或有选择地更新特定字段。字段名称是唯一的;在您的语句中:
admin.firestore().collection('testResult').doc(`${testId}`).set(
{
name: userName,
email: email,
},
{ merge: true },
);
您正在指定字段“名称”(name)和“电子邮件”(email),正如命令所述,它正在将这些字段设置为新值。如果您已经这样做:
admin.firestore().collection('testResult').doc(`${testId}`).set(
{
anotherName: userName,
anotherEmail: email,
},
{ merge: true },
);
...它会添加这些字段(如“将新字段合并到文档中”)并保留现有字段name
和email
就位
如果您已经这样做:
admin.firestore().collection('testResult').doc(`${testId}`).set(
{
anotherName: userName,
anotherEmail: email,
},
{ merge: false },
);
...(注意合并:false)它会将文档设置为
{
anotherName: userName,
anotherEmail: email,
},
...忽略现有字段。
请记住,字段名在文档中是唯一的-您不会看到这样的文档:
{
name: userName1,
email: email1,
name: userName2,
email: email2,
name: userName3,
email: email3,
name: userName4,
email: email4,
}
我强烈建议您多研究一下文档,并确切了解Firestore文档的工作原理。
方法(或带有合并标志的集)创建一个文档,该文档可以:
因此,对于您指定的任何字段,文档中该字段的任何现有值都将被覆盖。
有了这些知识,结果就像预期的那样。
如果要将指定的值附加到该字段的当前值,则需要使用原子事务来读写文档。
如果要存储多个用户名电子邮件组合,则需要在数组字段中进行存储。然后,您可以再次将新组合添加到事务中,或者(如果用户名电子邮件的组合必须是唯一的),您可以使用原子数组联合操作
我正在与Laravel 5.6与MySql数据库在我的Web应用程序。 我有下面的函数方法来添加顺序, 在我的系统中,我有以下车辆的表名, 现在我需要更新上面的表adtype值从0到1,当点击提交按钮关于上面的addorder函数。那么如何编写代码来更新上面函数中的代码呢???? 我的网址如下...... 路线是,
问题内容: 我有这个POJO课: 这是我的数据库: 有100名学生,有些活跃,有些则没有。我想让所有学生都不活跃。 码: 如何使用POJO 更新为false?谢谢! 问题答案: 您可以通过非常简单的方式解决此问题。除了getter之外,还应该像这样为您的属性创建一个setter : 创建了setter之后,就可以像这样直接在对象上使用它: 该代码的结果将是将所有学生对象的active属性更新为
我有这个POJO类: 这是我的数据库: 有100名学生,有些是活跃的,有些不是。我想让所有学生都不活跃。 法典: 如何使用POJO将更新为假?谢谢!
验证后,我试图在/users/处查找用户文档,然后我想使用auth对象中的数据以及一些自定义用户属性更新文档。但我得到一个错误,更新方法不存在。有没有办法更新单个文档?所有firestore文档示例都假定您拥有实际的文档id,并且没有任何示例使用where子句进行查询。
我有一个包含一些图像实体,我想使用HttpPatch方法更新它。 要创建新样式,我使用以下方法: 现在我正在尝试创建一个方法来使用HttpPatch方法更新这个样式。我试过了,但是没有选择在Swagger上上传文件: 这是StyleFiles类: 我正在考虑制作两个单独的endpoint,一个用于更新文件,另一个用于更新实体本身。但我不想那样做。
问题内容: 我读过这篇文章和同一个人的这篇文章,说您无法更新数组元素。 我还阅读了最近的一篇文章,有人说可以用某种方式完成此操作,但是我在文档中都无法获得有关stackoverflow的任何信息。 有什么办法可以解决这个问题?谢谢! 问题答案: 实际上,写这些答案的“家伙”是我:)那时,还没有一种更新数组元素的方法。只能存储数组,而 不能 更新数组成员。 现在,在更新文档时,您可以将第二个参数传递