次のコードがあります。
// Retrieve
var MongoClient = require("mongodb").MongoClient;
var accounts = null;
var characters = null;
// Connect to the db
MongoClient.connect("mongodb://localhost:27017/bq", function(err, db) {
if(err) { return console.dir(err); }
db.createCollection('accounts', function(err, collection) {
if(err) { return console.dir(err); }
else { accounts = collection; }
createAccount("bob","bob");
createAccount("bob","bob");
createAccount("bob","bob");
createAccount("bob","bob");
});
});
function createAccount(email, password)
{
accounts.findOne({"email":email}, function(err, item) {
if(err) { console.dir(err); }
else {
if(item === null) {
accounts.insert({"email":email, "password":password}, function(err, result) {
if(err) { console.dir(err); }
else { console.dir("Account " + email + " created."); }
});
}
else {
console.dir("Account already exists.")
}
}
});
}
初めてスクリプトを実行すると、bob のアカウントが 4 つになります。2 回目に実行すると、アカウントが既に存在するという 4 つのメッセージが表示されます。
私はこれがなぜなのかを知っていると確信しており、私が思いついた解決策は、データベースの各読み取り/書き込みを一度に1つずつ処理するためにある種のキューを使用することです. 私が知りたいのは、それが適切な方法であるかどうか、そしてこれに対する一般的なベストプラクティスは何ですか?