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. मोंगोडब में वस्तु की सरणी में कैसे खोजें?

  2. Ubuntu 18.04 पर MongoDB कैसे स्थापित करें

  3. मैं एक Mongo दस्तावेज़ को डालने के बाद उसे कैसे अपडेट करूं?

  4. मोंगोडब कई समूह क्षेत्रों के साथ अलग है

  5. मोंगोडब - सी # ड्राइवर के साथ कुछ तत्वों को शामिल या बहिष्कृत करें