sql >> Database >  >> NoSQL >> MongoDB

Waarom voegt mijn schema geen standaardwaarden toe aan mangoestarrays?

Standaardwaarden werken echt niet met arrays, tenzij het natuurlijk een document binnen de array is en je een standaardeigenschap voor dat document wilt instellen wanneer het aan de array wordt toegevoegd.

Daarom wordt een array altijd als "leeg" geïnitialiseerd, tenzij je er natuurlijk bewust iets in stopt. Om te doen wat u wilt bereiken, voegt u een pre-save hook toe die controleert op een lege array en daar anders een standaardwaarde in plaatst:

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);
});

Wat de waarde creëert waar leeg:

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

Als u natuurlijk uw gegevens initialiseert of manipuleert om een ​​item in de array te maken:

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

Dan krijg je de array die je hebt toegevoegd:

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

En als je "altijd" "Show" in permissies wilt hebben, dan kan een soortgelijke wijziging aan de hook dat voor je afdwingen:

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

  next();
});

Wat resulteert in:

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

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

Dat zijn de manieren waarop u standaardinstellingen voor uw array-items kunt beheren zonder ze expliciet in uw code te hoeven toewijzen met behulp van het model.



  1. Duurzaamheid en schrijfveiligheid in MongoDB begrijpen

  2. 2 manieren om een ​​verzameling in MongoDB te verwijderen

  3. Twee collecties samenvoegen in MongoDB

  4. Ontvang de ingestelde waarde van Redis met RedisTemplate