const query = firestore.collection(`/fruits`).where("name", "==", "banana").limit(1);
await firestore.runTransaction(async transaction => {
const querySnapshot = await transaction.get(query);
if (querySnapshot.length == 0) {
const newRef = firestore.collection(`/fruits`).doc();
await transaction.create(newRef, { name: "banana" });
}
});
const hash = computeHash("banana");
const uniqueIndexRef = firestore.doc(`/fruitsNameUniqueIndex/${hash}`);
try {
await firestore.runTransaction(async transaction => {
transaction.create(uniqueIndexRef, {});
const newRef = firestore.collection(`/fruits`).doc();
transaction.create(newRef, { name: "banana" });
});
} catch (error) {
console.log("fruit not inserted", error.message);
}
newRef保证不会被使用吗?
它实际上保证是唯一的。两个随机生成的文档ID的可能性非常小。
另见:
问题内容: 这似乎很简单:我想在SQLite表中复制一行: 如果没有显式的唯一列声明,则该语句将起作用,但是将声明表的第一列。有什么方法可以创建一个简单的语句,而上面的语句在不知道表模式的情况下起作用(除了第一列)? 问题答案: 好吧,由于无法按照我想要的方式执行此操作,因此我使用了隐式行ID,该ID与我显式定义的rowId列的名称相同,因此现在可以使用问题中使用的查询了。 ,它将使用新的rowI
问题内容: 我有以下SQLite代码。如何在每行中插入自动生成的唯一ID? 问题答案: 您可以将其定义为自动递增列: 正如MichaelDorner指出的那样,SQLite文档说an可以做同样的事情,并且速度稍快。该类型的列是其别名,其行为类似于自动增量列。 此行为是隐式的,可能会使经验不足的SQLite开发人员措手不及。
问题内容: 我定义了一个MySQL表: 我在这里阅读到MySQL不支持带条件的。对于每个 customerId, 我们只有一个 primaryImage = 1 。 那么我还能采取什么措施来强制执行此约束? 问题答案: 完美支持独特的约束。 但是,它不支持部分约束/索引,因此您需要使用而不是标记非主图像。 您可以将任意数量的值插入到每个客户中,但只能插入一个非空值。
我有一个名为“posts”的Firebase Firestore集合,其结构如下: 我可以查询所有类别为“general”的博客文章,如:然而,我似乎无法找到一种方法来获取“类别”映射为空的所有文档。 我想查询“帖子”集合中的所有文档,其中有。我尝试了,但没有成功。我将如何获取这些数据?
尝试使用我已经使用的自动完成功能,使用以下映射 分析:过滤器:placename\u ngram:max\u gram=15,min\u gram=2,type=edge\u ngram分析器:索引:过滤器:小写,placename\u ngram,标记器:关键字placename\u搜索:过滤器:小写:标记器关键字 这对于前面的类型非常有用,但是当我试图找到像“包含在”这样的值时,它不会返回记录
问题内容: 在MySQL中,我试图复制一排的 自动增量 和 插入 数据到同一个表的新行。 如何在单个查询中执行此操作? 问题答案: 用途: 除以外的所有列都在哪里?如果要显式插入2,则将其包括在INSERT列列表和SELECT中: 当然,在第二种情况下,您必须注意2 的可能重复项。