-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsequenceDao.js
46 lines (43 loc) · 1.25 KB
/
sequenceDao.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
const mongo = require("mongodb").MongoClient;
module.exports = {
getNextSequence: function getNextSequence(collectionName, db, callback) {
var sequence = db.collection("sequence");
// Find sequence for collection of name collectionName
sequence.find({
_id: collectionName
}).toArray(handleGetNextSequence.bind(null, collectionName, sequence, callback));
}
};
function initSequence(collectionName, sequence) {
sequence.insert({
_id: collectionName,
seq: 0
}, function(err, result) {
if (err) {
throw err;
}
});
}
function updateSequence(collectionName, sequence, callback) {
sequence.findAndModify(
{ _id: collectionName },
[['_id','asc']],
{ $inc: { seq: 1 } },
{ new: true }
, function(err, result) {
if (err) {
throw err;
}
return callback(result.value.seq);
});
}
function handleGetNextSequence(collectionName, sequence, callback, err, documents) {
if (err) {
throw err;
}
var isEmpty = documents.length <= 0;
if (isEmpty) {
initSequence(collectionName, sequence);
}
return updateSequence(collectionName, sequence, callback);
}