-
-
Notifications
You must be signed in to change notification settings - Fork 3.8k
/
populate.js
84 lines (69 loc) · 1.82 KB
/
populate.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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
'use strict';
const mongoose = require('../');
const Schema = mongoose.Schema;
const docs = process.argv[2] ? process.argv[2] | 0 : 100;
const A = mongoose.model('A', Schema({ name: 'string' }));
const nested = Schema({
a: { type: Schema.ObjectId, ref: 'A' }
});
const B = mongoose.model('B', Schema({
as: [{ type: Schema.ObjectId, ref: 'A' }],
a: { type: Schema.ObjectId, ref: 'A' },
nested: [nested]
}));
let start;
let count = 0;
mongoose.connect('mongodb://127.0.0.1/mongoose-bench', function(err) {
if (err) {
return done(err);
}
A.create({ name: 'wooooooooooooooooooooooooooooooooooooooooot' }, function(err, a) {
if (err) {
return done(err);
}
let pending = docs;
for (let i = 0; i < pending; ++i) {
new B({
as: [a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a],
a: a,
nested: [{ a: a }, { a: a }, { a: a }, { a: a }, { a: a }, { a: a }]
}).save(function(err) {
if (err) {
return done(err);
}
--pending;
if (pending === 0) {
// console.log('inserted %d docs. beginning test ...', docs);
start = Date.now();
test();
}
});
}
});
});
function test() {
let pending = 2;
B.find().populate('as').populate('a').populate('nested.a').exec(handle);
B.findOne().populate('as').populate('a').populate('nested.a').exec(handle);
function handle(err) {
if (err) {
throw err;
}
count++;
if (Date.now() - start > 1000 * 20) {
return done();
}
if (--pending === 0) {
return test();
}
}
}
function done(err) {
if (err) {
console.error(err.stack);
}
mongoose.connection.db.dropDatabase(function() {
mongoose.disconnect();
console.log('%d completed queries on mongoose version %s', count, mongoose.version);
});
}