一意の値が見つかるまで、MongoDB に既存の ID を照会する while ループを作成することにより、Node.js と MongoDB で一意の ID を見つけようとしています。ID が既に使用されている場合、Mongo が何も返さないまで、最後に数値がインクリメントされます。
break;
一意の ID が見つかった場合のステートメントを除いて、すべてが機能しています。Node.js は以下を返します。SyntaxError: Illegal break statement
コード:
db.collection('landmarks').findOne({'id':uniqueIDer}, function(err, data){
//if ID exists already
if (data.id){
var uniqueNumber = 1;
while (1) {
var uniqueNum_string = uniqueNumber.toString();
var newUnique = data.id + uniqueNum_string;
db.collection('landmarks').findOne({'id':newUnique}, function(err, data){
if (data.id){
uniqueNumber++;
}
else {
saveLandmark(newUnique);
break;
}
});
}
}
else {
saveLandmark(uniqueIDer);
}
});
私は何を間違っていますか?
編集:
誰かが必要な場合は、非同期を使用して修正されたコードを次に示します:)
db.collection('landmarks').findOne({'id':uniqueIDer}, function(err, data){
if (data){
var uniqueNumber = 1;
var newUnique;
async.forever(function (next) {
var uniqueNum_string = uniqueNumber.toString();
newUnique = data.id + uniqueNum_string;
db.collection('landmarks').findOne({'id':newUnique,'world':worldVal}, function(err, data){
if (data){
console.log('entry found!');
uniqueNumber++;
next();
}
else {
console.log('entry not found!');
next('unique!'); // This is where the looping is stopped
}
});
},
function () {
saveLandmark(newUnique);
});
}
else {
saveLandmark(uniqueIDer);
}
});