MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

atur nilai default ke array luwak di node js

Luwak memungkinkan Anda untuk "memisahkan" definisi skema. Baik untuk "penggunaan ulang" umum dan kejelasan kode. Jadi cara yang lebih baik untuk melakukannya adalah:

// general imports
var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

// schema for params
var paramSchema = new Schema({
    "name": { "type": String, "default": "something" },
    "value": { "type": String, "default": "something" }
});

// schema for features
var featureSchema = new Schema({
    "name": { "type": String, "default": "something" }
    "params": [paramSchema]
});

var appSchema = new Schema({
    "appFeatures": [featureSchema]
});

// Export something - or whatever you like
module.export.App = mongoose.model( "App", appSchema );

Jadi "bersih", dan "dapat digunakan kembali" jika Anda bersedia menjadikan definisi "Skema" sebagai bagian dari modul individual dan menggunakan sistem "memerlukan" untuk mengimpor sesuai kebutuhan. Anda bahkan dapat "mengintrospeksi" definisi skema dari objek "model" jika Anda tidak ingin "memodulasi" semuanya.

Namun sebagian besar, ini memungkinkan Anda untuk menentukan dengan jelas "apa yang Anda inginkan" untuk default.

Untuk default yang lebih kompleks, Anda mungkin ingin melakukan ini di hook "pra simpan". Sebagai contoh yang lebih lengkap:

var async = require('async'),
    mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var paramSchema = new Schema({
  "name": { "type": String, "default": "something" },
  "value": { "type": String, "default": "something" }
});

var featureSchema = new Schema({
  "name": { "type": String, "default": "something" },
  "params": [paramSchema]
});

var appSchema = new Schema({
  "appFeatures": [featureSchema]
});

appSchema.pre("save",function(next) {
  if ( !this.appFeatures || this.appFeatures.length == 0 ) {
    this.appFeatures = [];
    this.appFeatures.push({
      "name": "something",
      "params": []
    })
  }

  this.appFeatures.forEach(function(feature) {
    if ( !feature.params || feature.params.length == 0 ) {
      feature.params = [];
      feature.params.push(
       {  "name": "a", "value": "A" },
       {  "name": "b", "value": "B" }
      );
    }
  });
  next();
});


var App = mongoose.model( 'App', appSchema );

mongoose.connect('mongodb://localhost/test');


async.series(
  [
    function(callback) {
      App.remove({},function(err,res) {
        if (err) throw err;
        callback(err,res);
      });
    },
    function(callback) {
      var app = new App();
      app.save(function(err,doc) {
        if (err) throw err;
        console.log(
          JSON.stringify( doc, undefined, 4 )
        );
        callback()
      });
    },
    function(callback) {
      App.find({},function(err,docs) {
        if (err) throw err;
        console.log(
          JSON.stringify( docs, undefined, 4 )
        );
        callback();
      });
    }
  ],
  function(err) {
    if (err) throw err;
    console.log("done");
    mongoose.disconnect();
  }
);

Anda bisa membersihkannya dan mengintrospeksi jalur skema untuk mendapatkan nilai default di level lain. Tetapi pada dasarnya Anda ingin mengatakan jika array dalam tidak didefinisikan maka Anda akan mengisi nilai default sebagai kode.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menginstal dan menggunakan MongoDB di Grails 3.x

  2. Bagaimana menghubungkan ke MongoDB menggunakan PhantomJS

  3. Masukkan dokumen MongoDB dengan React.js

  4. Apa itu MongoDB, dan bagaimana cara kerjanya?

  5. Kapan saya harus membuka dan menutup koneksi MongoDB?