4
votes

I'm trying to save and read some data from a MongoDB using standard MongoClient and pure NodeJS. The thing is that I can write data but not read it. Here is my code.

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
var db;

MongoClient.connect(url, function (err, database) {
    if (err !== null) {
        throw err;
    }
    db = database;
});

Read function

function selectDB(tableName, key, value, callback) {
    var req = {};
    req[key] = value;
    db.collection(tableName).find(req, callback);
}

Write function

function insertDB(tableName, obj) {
    db.collection(tableName).insertOne(obj, function (err, res) {
        if (err !== null) {
            throw err;
        } else {
            console.log(res);
        }
    });
}

After I've inserted data into db using this, it can be found using Mongo shell. I use bash find() function in the shell successfully but not in the js code.

Update

Now I pass the callback to the toArray() function as mentioned here, but I still get no result: the callback is not executed. My selectDB()function now looks like this.

var req = {};
req[key] = value;
db.collection(tableName).find(req).toArray(callback);

Update

Here is some data query example: Shell Input:

> db.users.find({"email":"aa@aa"})

Output:

{ "_id" : ObjectId("572ba1a599f59780f549e5e3"), "email" : "aa@aa", "password" : "2GU9I8syq2Oyf6rSqJNDVyFPOTRwPg3nyQjSwPXppvM=" }

JS

Query (key value pair for the req variable):

key = "email" value = "aa@aa"

After that I get the results I described before.

Update

After all here is my result handling code (callback):

//select() here is an alias for selectDB() function declared earlyer
db.select("users", "email", user.email, function (err, cursor) {
        if (cursor === undefined || cursor == null || err !== null) {
            error();
        } else if (cursor.password === user.password) {
            success();
        } else {
            wrong();
        }
    });

Finally the callback is executed. The error() function is always executed since cursor in the callback always undefined.

If somebody knows what I'm doing wrong and how to fix it, please answer.

1
one way is to implement the binary protocol over the wire... just saying - Ryan
@maga, please, take a look on the update. - Dmytro
@JohnnyHK, please, take a look - Dmytro
@vp_arth, could you be more specific? - Dmytro
Where your selectDB call code? Where you check results? Is there anything returned into err argument of callback? - vp_arth

1 Answers

2
votes

What version of the node-mongodb-native (the driver) are you using? In the latest one find does not accept callback as the second argument.