MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tại sao lược đồ của tôi không thêm giá trị mặc định trong mảng mongoose?

Các giá trị mặc định thực sự không hoạt động với mảng, tất nhiên trừ khi nó là một tài liệu trong mảng và bạn muốn đặt thuộc tính mặc định cho tài liệu đó khi được thêm vào mảng.

Do đó, một mảng luôn được khởi tạo là "trống", trừ khi bạn cố tình đặt một cái gì đó vào đó. Để làm những gì bạn muốn đạt được, sau đó thêm một móc lưu trước để kiểm tra một mảng trống và sau đó đặt một giá trị mặc định vào đó:

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

Cái tạo ra giá trị ở nơi trống:

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

Tất nhiên, nếu bạn khởi tạo dữ liệu của mình hoặc thao tác để tạo mục nhập trong mảng:

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

Sau đó, bạn nhận được mảng bạn đã thêm:

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

Và nếu bạn muốn "luôn" có "Hiển thị" trong quyền, thì một thay đổi tương tự đối với hook có thể thực thi điều đó cho bạn:

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

  next();
});

Kết quả là:

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

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

Đó là những cách bạn có thể kiểm soát các giá trị mặc định trên các mục nhập mảng của mình mà không cần chỉ định chúng một cách rõ ràng trong mã của bạn bằng cách sử dụng mô hình.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Xóa một đối tượng khỏi một mảng lồng nhau với $ pull và $ [số nhận dạng] (mongoDB 3.6)

  2. MongoDB nguyên tử findOrCreate:findOne, chèn nếu không tồn tại, nhưng không cập nhật

  3. Bắt đầu:Tạo giao diện io.Writer để đăng nhập vào cơ sở dữ liệu mongodb

  4. MongoDB:Sử dụng khớp với các biến tài liệu đầu vào

  5. Nhà điều hành đường ống tổng hợp MongoDB $ lte