【发布时间】:2020-07-14 17:38:33
【问题描述】:
我正在尝试找出防止重复文档保存在 MongoDB 中的最佳方法。
现在我的表单从用户那里获取 user_url。逻辑是:
检查 user_url 是否有效。 (dns.lookup)
如果user_url是新的,保存到数据库并返回url_ID。
如果 user_url 是旧的,只返回 url_ID。
我认为我的 2 个选项是:
var findOneURL = function(user_url, done) {
URL.findOne({
orig_url: user_url
}, (err, data) => {
if (err) {
done(err);
}
done(null, data);
})
}
或
var findEditThenSave = function(user_url, done) {
URL.findById(user_url, (err, data) => {
if (err) {
done(err);
}
data.save((err, data) => {
if (err) {
done(err);
}
done(null, data);
});
})
};
目前它运行得不是很好,但这是实时版本: https://kindly-fisherman.glitch.me/
EDIT2:我想我现在可以正常工作了。这是我的逻辑:
保存到数据库: dns.lookup -> findByURL -> (如果不存在) -> countURLs -> findAndUpdateURL -> 返回保存的内容数据库。
OR -> (如果存在) -> 返回记录。
从数据库中检索: findByID
【问题讨论】:
-
由于您使用的是
mongoose,因此您可以在模型中使用unique: true属性。 mongoosejs.com/docs/2.7.x/docs/schematypes.html -
我建议在单个字段上使用唯一索引。 docs.mongodb.com/manual/core/index-unique。这将在插入重复行时引发错误。根据错误代码,您可以轻松找出这一点。
标签: javascript node.js mongodb