Mongoose default single sub-document

Mongoose created a new unified subdocumentation documentation ( and documentation ) in version 4.2.7, which allows creating a unified embedded sub-indicator scheme that behaves as one-to-many pallets arrive.

What is the best way to create a single default subdoc while saving the parent?

var UserPermisssionsSchema = new mongoose.Schema({
    siteAdmin: {
        type: Boolean,
        default: false,
    }
});

var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: UserPermisssionsSchema 
});

I would like to create a field permissionswith default values ​​when creating the parent user document.

This does not work:

Edit: this now works after the Mongoose change that happened somewhere between 4.2.7 and 4.4.3

var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: 
    type: UserPermisssionsSchema ,
    default: UserPermisssionsSchema,
  }
});
+4
source share
2 answers

Please try this

var PerSchema = new mongoose.Schema({
    siteAdmin: {type: Boolean, default: false}
  }); 

var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: { type: PerSchema, default: PerSchema },
});

Mongoose v4.4.3

var User = mongoose.model('User', UserSchema);

function setUser() {
    var u = new User({
        fname: 'asa',
        lname: 'dddd'
    });

    u.save(function(err) {
        if (err)
            console.log(err);
        else
            console.log('save user successfully');
    });
}

{ 
  "_id" : ObjectId("56c68321a548be98198ebb71"), 
  "fname" : "asa", 
  "lname" : "dddd", 
  "permissions" : {
       "_id" : ObjectId("56c68321a548be98198ebb70"), 
       "siteAdmin" : false
       },
   "__v" : 0
}

, permissions {}. , , .

var PerSchema = mongoose.Schema({
    siteAdmin: {type: Boolean}
}, {_id: false}); 

var UserSchema = mongoose.Schema({
    fname: String,
    lname: String,
    permissions: { type: PerSchema, required: true, default: {} },
}); 

function setUser() {
    var u = new User({
        fname: 'asa',
        lname: 'dddd'
    });

    u.save(function(err) {
        if (err)
            console.log(err);
        else
            console.log('save user successfully');
    });
}

{ "_id" : ObjectId("56c687427191d54021875fb1"), 
  "fname" : "asa", 
  "lname" : "dddd",
  "permissions" : {  }, 
  "__v" : 0
}
+7

, :

var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: 
    type: UserPermisssionsSchema ,
    default: () => ({}),
  }
});

permissions , UserPermissionsSchema. default UserPermisssionsSchema, , .

+4

Source: https://habr.com/ru/post/1629475/


All Articles