簡體   English   中英

為什么我的架構沒有在mongoose數組中添加默認值?

[英]Why doesn't my schema to add default values in mongoose arrays?

我有這樣的架構:

var CustomUserSchema = new Schema({
    role: [],
    permissions: [],
});

permissions字段存儲一個如下所示的字符串數組:

["Delete", "Show","Create"]

role字段存儲一個如下所示的對象數組:

[
    {
        name:"admin",
        priority:10,
        permissions: ["Delete", "Show" , "update"]
    },
    {
        name:"user",
        priority:5,
        permissions: ["Delete", "Show"]
    }
]

現在,我的要求是能夠將“顯示”存儲為模式中permissions字段的默認值,並將“用戶”存儲為角色字段內的名稱的默認值,優先級0表示role字段內的priority和“顯示”對於role字段內的permissions

試着自己,我想出了這個:

var CustomUserSchema = new Schema({
    role: [{
        name: {type: String, default: 'user'},
        priority:{ type: Number, default: 0 } ,
        permissions: [{type:String, default:'Show'}]
    }],
    permissions: [{type:String, default:'Show'}]
});

但它根本沒有為字段分配默認值,而是為字段提供大小為0的數組。

以上架構似乎有什么問題? 如何將這些存儲為默認值?

默認值實際上不適用於數組,除非它當然是數組中的文檔,並且您希望在添加到數組時為該文檔設置默認屬性。

因此,數組總是初始化為“空”,除非你故意在其中加入一些東西。 為了實現您想要實現的目標,請添加一個預保存掛鈎 ,用於檢查空數組,然后在其中放置一個默認值:

var async = require('async'),
    mongoose = require('mongoose'),
    Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/authtest');

var userSchema = new Schema({
  permissions:[{
    "type": String,
    "enum": ["Delete","Show","Create","Update"],
  }]
});

userSchema.pre("save",function(next) {
  if (this.permissions.length == 0)
    this.permissions.push("Show");

  next();
});

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

var user = new User();

user.save(function(err,user) {
  if (err) throw err;
  console.log(user);
});

這會創建空值:

{ __v: 0,
  _id: 55c2e3142ac7b30d062f9c38,
  permissions: [ 'Show' ] }

當然,如果您初始化數據或操作以在數組中創建條目:

var user = new User({"permissions":["Create"]});

然后你得到你添加的數組:

{ __v: 0,
  _id: 55c2e409ec7c812b06fb511d,
  permissions: [ 'Create' ] }

如果你想“總是”在權限中出現“顯示”,那么對鈎子的類似更改可以強制執行:

userSchema.pre("save",function(next) {
  if (this.permissions.indexOf("Show") == -1)
    this.permissions.push("Show");

  next();
});

結果如下:

var user = new User({"permissions":["Create"]});

{ __v: 0,
  _id: 55c2e5052219b44e0648dfea,
  permissions: [ 'Create', 'Show' ] }

這些是您可以控制數組條目的默認值的方法,而無需使用模型在代碼中顯式分配它們。

你可以用這種方式在mongoose中添加默認數組值 -

var CustomUserSchema = new Schema({
    role: {
        type: Array, 
        default: {
            name: 'user', 
            priority: 0, 
            permissions: ['Show']
        }
    },
    permissions: {
        type: [String], 
        default: ['Show']
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM