使用Prisma与MongoDB存储唯一值的实现方案
实现MongoDB仅存储唯一值的方案
1. 先创建唯一索引(关键前提)
首先给luckyNumber字段创建唯一索引,从数据库层面强制唯一性,杜绝重复数据写入:
db.collection.createIndex({ luckyNumber: 1 }, { unique: true })
注:如果集合中已存在luckyNumber重复的文档,创建索引会失败,需先清理重复项再执行此命令。
2. 处理外部数据的两种实用方法
方法一:批量写入(高效推荐)
使用bulkWrite批量处理外部数组,结合updateOne和upsert: true规则——匹配到已有文档则不操作,未匹配到则插入新文档:
const externalData = [1, 2, 3, 4, 5]; const operations = externalData.map(num => ({ updateOne: { filter: { luckyNumber: num }, update: { $setOnInsert: { luckyNumber: num } }, upsert: true } })); db.collection.bulkWrite(operations);
$setOnInsert的作用是仅在插入新文档时设置字段,对已有文档不会做任何修改,完全贴合需求。
方法二:循环单个处理(适合小数据量)
如果数据量较小,也可以直接遍历数组,逐个执行updateOne:
const externalData = [1, 2, 3, 4, 5]; externalData.forEach(num => { db.collection.updateOne( { luckyNumber: num }, { $setOnInsert: { luckyNumber: num } }, { upsert: true } ); });
执行完上述任意一种操作后,数据库最终就会包含luckyNumber为1、2、3、4、5的唯一文档,不会出现重复项。
内容的提问来源于stack exchange,提问作者Andon Mitev
相关产品推荐
相关产品推荐

