skip to Main Content

I am aware that _id is already unique. However, due to circumstances, I cannot use it. Each user uses an e-mail address and a username, but I cannot use those either. What I want to use this secondary ID for are friend codes. I do not require them to be short. If they are as long and random as _id, that will not be a problem since users will not have to enter them anywhere. Can such property be assigned during the execution of the insertOne() function?

2

Answers


  1. You cant set unique index for those fields
    db.users.createIndex( { email: 1, username: 1}, { unique: true } )


    Referrer Unique Indexes

    Login or Signup to reply.
  2. You can set a model to generate the _id or not, but for as far as I’m aware there is no option to allow the generation of a second unique identifier automatically.

    You could tweak the insertOne method by using uuid as such:

    import { v4 as uuidv4 } from 'uuid';
    
    function insertOne(collectionName, document, writeConcern) {
       const [document, ...otherArgs] = args;
       db[collectionName].insertOne({ id: new uuidv4(), ...document }, writeConcern)
    }
    
    try {
       insertOne( 'collectionName', { item: "card", qty: 15 } );
    } catch (e) {
       print (e);
    };
    

    Additionally, if you prefer calling db.collection.insertOne every time and have the id added automatically, you should be able to do so by using it as such (haven’t tested it, but it should work):

    import { v4 as uuidv4 } from 'uuid';
    
    db.collection.prototype.insertOne = function(document, writeConcern) {
       db.collection.insertOne({ id: new uuidv4(), ...document }, writeConcern)
    };
    
    try {
       db.collection.insertOne( { item: "card", qty: 15 } );
    } catch (e) {
       print (e);
    };
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search