我从MongoDB迁移到Postgres。但我还是喜欢猫鼬提供的一些界面。因此我尝试实施它们。这是问题所在,我创建了一个名为' User'的课程。它已经节省了#39;方法。在猫鼬中,无论何时更新或创建新文档,我都可以打电话来保存'将文档插入/更新到数据库中。他们是如何实现的?有什么建议吗?
这是我尝试过的,但我不确定这是一个好的做法:
class User {
constructor (obj) {
for (let key in obj) {
this[key] = obj[key]
}
Object.defineProperty(newAdmin, 'exist', {
configurable: true,
writable: true,
enumerable: false,
value: false
})
}
async update () {//}
async save () {
const user = this
if (user.exist) {
return user.update()
}
const query = `query here`
const {rows} = await db.query(query)
Object.assign(user, rows[0])
user.exist = true
return user
}
}
答案 0 :(得分:1)
MongoDB在更新文档时支持 upsert 的概念。 mongoose如何从模型中更新数据库取决于您使用的确切方法。但是,它可能正在使用该功能。
这已经出现在postgres 9.5+中,请参阅UPSERT文档。
简而言之,您可以运行INSERT
语句并使用ON CONFLICT UPDATE
,强制它在发生约束错误时更新列(例如,主键已存在行)。
例如,您可以执行以下操作:
INSERT INTO users (ID,Name) VALUES(1,'john')
ON CONFLICT ON CONSTRAINT users_pkey DO
UPDATE SET Name=EXCLUDED.Name