Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Inserting data to MongoDB - no error, no insert

I'm currently trying to make a register form using mongoDB and nodeJS - I've created new database and collection - I want to store: username, password, email and insert_time in my database.

I've added unique indexes to username/email and checked if it works - and I can not add a duplicated entry using mongo's console or rockmongo (php mongodb manager) - so it works fine.

However - when the piece of code that is supposed to register a new account is being executed and makes an insert with the data that is already in database - it returns an object that contains all the data that was supposed to be added with a new, unique id. The point is - it should return an error that would say that entries can not be duplicated and insert failed - instead it returns the data back and gives it a new id. Data that already resides in database remains untouched - even the ID stays the same - it's not rewritten with the new one returned by script's insert.

So, the question is... what am I doing wrong? Or maybe everything is fine and database's insert should return data even if it's failed?...

I even tried defining indexes before executing indexes. I tried inserting the data using mongoDB's default functions and mongoJS functions - the result is the same in both cases.

The code I'm trying to execute (for mongoJS):

var dbconn = require("mongojs").connect('127.0.0.1:27017/db', ['users']);

var register = function(everyone, params, callback)
{
    // TODO: validation

    dbconn.users.ensureIndex({username:1},{unique:true});
    dbconn.users.ensureIndex({email:1},{unique:true});

    dbconn.users.save(
    {
        username: params.username,
        password: params.password,
        email: params.email,
        insert_time: Date.now()
    },
    function(error, saved)
    {
        if(error || !saved)
        {
            callback(false);
        }
        else
        {
            console.log(error);
            console.log(saved);
            callback(true);
        }
    });
}

For both cases - inserting new data and inserting duplicated data that doesn't modify database in any way - ERROR is null and SAVED is just a copy of data that is supposed to be inserted. Is there any way to check if insert was made or not - or do I have to check whether the data already exists in database or not manually before/after making an insert?

like image 245
biphobe Avatar asked Feb 26 '12 21:02

biphobe


People also ask

How manually insert data in MongoDB?

The insert() Method To insert data into MongoDB collection, you need to use MongoDB's insert() or save() method.

Why my database is not connecting in MongoDB?

If you have created a user and are having trouble authenticating, try the following: Check that you are using the correct username and password for your database user, and that you are connecting to the correct database deployment. Check that you are specifying the correct authSource database in your connection string.

What is the insert command in MongoDB?

The insert command inserts one or more documents and returns a document containing the status of all inserts. The insert methods provided by the MongoDB drivers use this command internally. The name of the target collection. An array of one or more documents to insert into the named collection.

What is the difference between insert and save in MongoDB?

But the main difference between 'save' and 'insert' command is that the 'save' command can insert or update a document whereas 'insert' only performs the insertion.


1 Answers

Mongo works that way. You should tell you want to get errors back, using the safe option when you issue the save command (as per default it uses the "fire and forget" method).

https://docs.mongodb.com/manual/reference/command/getLastError/

like image 61
dicarsio Avatar answered Oct 12 '22 01:10

dicarsio