Mongoose单个嵌入子文档默认值

Mongoose单个嵌入子文档默认值,mongoose,Mongoose,Mongoose在版本4.2.7中创建了一个新的单子文档功能(and),允许一个嵌入的子文档模式,其行为方式与一对多子文档的行为方式相同 在父级保存时创建默认单子单据的最佳方法是什么 var UserPermisssionsSchema = new mongoose.Schema({ siteAdmin: { type: Boolean, default: false, } }); var UserSchema = mongoose.Schema

Mongoose在版本4.2.7中创建了一个新的单子文档功能(and),允许一个嵌入的子文档模式,其行为方式与一对多子文档的行为方式相同

在父级保存时创建默认单子单据的最佳方法是什么

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

var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: UserPermisssionsSchema 
});
我希望在创建父用户文档时使用默认值创建
权限
字段

这不起作用:

编辑:在4.2.7和4.4.3之间发生猫鼬更改后,此功能现在起作用

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

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

var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: { type: PerSchema, default: () => ({}) },
});
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
}

如果希望
权限
的默认值为
{}
。请按以下方式尝试

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

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

结果是

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

Mongoose维护人员,我建议:

var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: 
    type: UserPermisssionsSchema ,
    default: () => ({}),
  }
});
这将使
permissions
相对于
userpermissionschema
可能具有的任何默认值默认为空对象。如果将
default
设置为
UserPermissionsSchema
,如果某个属性恰好与mongoose架构方法重叠,则可能会出现一些不良行为。

mongoose single embedded sub document default Mongoose多(数组)嵌入子文档默认值
这也行不通。错误是:
键$\uuuuu不能以“$”开头
@steampowered,我测试了它并在我的答案中显示了结果,如果我遗漏了什么,请告诉我…我在出现错误时使用的是
4.2.7
,但现在升级到4.4.3它可以工作了!您为什么将
PerSchema
定义为新的
mongoose.Schema
UserSchema
定义为简单的
mongoose.Schema
?请不要将
默认值
设置为架构实例<代码>默认值:PerSchema
错误,并在最近版本的Mongoose中抛出错误。改用
default:()=>({})
var UserSchema = mongoose.Schema({
  fname: String,
  lname: String,
  permissions: 
    type: UserPermisssionsSchema ,
    default: () => ({}),
  }
});
var UserPermisssionsSchema = new mongoose.Schema({
    siteAdmin: {
        type: Boolean,
        default: false,
    }
});

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

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