MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Dlaczego mój schemat nie dodaje wartości domyślnych w tablicach mangusty?

Wartości domyślne naprawdę nie działają z tablicami, chyba że jest to dokument w tablicy i chcesz ustawić domyślną właściwość dla tego dokumentu po dodaniu do tablicy.

Dlatego tablica jest zawsze inicjowana jako "pusta", chyba że celowo coś w niej umieścisz. Aby zrobić to, co chcesz osiągnąć, dodaj zaczep przed zapisem, który sprawdza pustą tablicę, a następnie umieszcza tam domyślną wartość:

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

Co tworzy wartość tam, gdzie jest pusta:

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

Jeśli oczywiście zainicjujesz swoje dane lub manipulujesz, aby utworzyć wpis w tablicy:

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

Następnie otrzymujesz dodaną tablicę:

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

A jeśli chcesz „zawsze” mieć „Pokaż” obecne w uprawnieniach, podobna zmiana w haczyku może to wymusić:

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

  next();
});

Co skutkuje:

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

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

W ten sposób możesz kontrolować wartości domyślne we wpisach tablicy bez konieczności jawnego przypisywania ich w kodzie za pomocą modelu.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 2 sposoby na usunięcie kolekcji w MongoDB

  2. Jak ściągnąć jedną instancję elementu w tablicy w MongoDB?

  3. Jak utworzyć indeks zagnieżdżony w MongoDB?

  4. MongoDB kontra Cassandra

  5. Przegląd opcji tworzenia kopii zapasowych MongoDB