Reputation: 7654
I'm aware that the Node driver for Mongo can be promisified using external libraries. I was curious to see if ES6 promises could be used with MongoClient.connect
, so I tried this (using Babel 5.8.23 to transpile):
import MongoClient from 'mongodb';
function DbConnection({
host = 'localhost',
port = 27017,
database = 'foo'
}) {
return new Promise((resolve, reject) => {
MongoClient.connect(`mongodb://${host}:${port}/${database}`,
(err, db) => {
err ? reject(err) : resolve(db);
});
});
}
DbConnection({}).then(
db => {
let cursor = db.collection('bar').find();
console.log(cursor.count());
},
err => {
console.log(err);
}
);
The output is {Promise <pending>}
. Anything to do with cursors seems to yield a similar result. Is there a way to get around this or am I barking up the wrong tree entirely?
Edit: node version 4.1.0.
Upvotes: 6
Views: 5545
Reputation: 843
Another syntax for the response of loganfsmyth (thanks by the way)
cursor.count().then(function(cursor_count){
if(cursor_count){
// use cursor
}else{
// no results
}
}
Upvotes: 0
Reputation: 161457
There is nothing to get around, this is the expected behavior. cursor.count()
returns a promise, if you want the value, you need to use .then
, e.g.
DbConnection({}).then(
db => {
let cursor = db.collection('bar').find();
return cursor.count();
}
}).then(
count => {
console.log(count);
},
err => {
console.log(err);
}
);
or simplified
DbConnection({}).then(db => db.collection('bar').find().count()).then(
count => console.log(count),
err => console.log(err)
);
Upvotes: 10