我正在构建一个Web钩子,它将从Facebook接收POST请求。在每个请求中,都有一个facebookId
字段,用于在数据库中插入新记录。 facebookId
在数据库中应该是唯一的(意思是没有两个记录应该具有相同的 facebookId
)。
原型代码是这样的
postRequestHandler(req) {
const facebookId = req.body.facebookId;
if (!Meteor.users.findOne({ facebookId })) {
Meteor.users.insert({
facebookId,
// some other fields
})
}
}
问题是,有时候有很多请求(是的,它们有不同的含义),包含相同的新 facebookId
(数据库中不存在)和它们几乎同时出现。这将使!Meteor.users.findOne({ facebookId })
检查失败,并且具有相同facebookId
字段的多个记录将插入到数据库中。我该如何防止这种情况?
答案 0 :(得分:2)
您应该在facebookId
字段上创建unique index,以使MongoDB保证数据的唯一性,然后在您的insert
调用返回的回调周围添加一些异常处理代码(文档here)。您需要根据业务需求判断正确的异常处理代码应该是什么样的。
Meteor.users.insert({
facebookId,
// some other fields
}, function(error, id) {
if ( error ) {
/* add exception handling code here, e.g. return an error message to the client */
} else {
/* add code for successful case here, 'id' will be your newly inserted document's '_id' */
}
});