MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Защо моята схема не добавя стойности по подразбиране в масиви от мангусти?

Стойностите по подразбиране наистина не работят с масиви, освен ако разбира се не е документ в масива и не искате да зададете свойство по подразбиране за този документ, когато се добави към масива.

Следователно масивът винаги се инициализира като "празен", освен ако, разбира се, умишлено не поставите нещо в него. За да направите това, което искате да постигнете, след това добавете кука за предварително записване, която проверява за празен масив и след това поставя стойност по подразбиране там:

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' ] }

Това са начините, по които можете да контролирате настройките по подразбиране на записите си в масива, без да е необходимо изрично да ги присвоявате в кода си с помощта на модела.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Нуждаете се от решение за търсене на низ към objectID externalField

  2. MongoDB какви са потребителят и паролата по подразбиране?

  3. MongoDB:намерете и findOne с филтриране на вложени масиви

  4. Заявете MongoDB с израз на регулярен израз срещу ObjectId

  5. Групов масив след размотаване и съвпадение