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

Самообръщащата се схема на Mongoose не създава ObjectId за всички поддокументи

Трябва да изградите нов обект, когато декларирате своя вграден CollectPoint елементи:

var data = new CollectPoint({
    name: "Level 1",
    collectPoints: [
        new CollectPoint({
            name: "Level 1.1",
            collectPoints: []
        })
    ]
});

По този начин _id и collectPoints ще бъде създаден чрез екземпляр на CollectPoint в противен случай просто създавате обикновен JSONObject.

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

var CollectPointSchema = new mongoose.Schema({
    name: { type: String },
    collectPoints: {
        type: [this],
        validate: {
            validator: function(v) {
                if (!Array.isArray(v)) return false
                for (var i = 0; i < v.length; i++) {
                    if (!(v[i] instanceof CollectPoint)) {
                        return false;
                    }
                }
                return true;
            },
            message: 'bad collect point format'
        }
    }
});

По този начин следното ще задейства грешка:

var data = new CollectPoint({
    name: "Level 1",
    collectPoints: [{
        name: "Level 1.1",
        collectPoints: []
    }]
});



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да намеря колекция от кодове с регулярен израз и сложни критерии с помощта на Java MongoDB драйвер?

  2. Как да коригирате грешка с твърде много отворени файлове при агрегиране на милиарди записи

  3. По-лесен начин за актуализиране на масив с MongoDB

  4. Разгръщане и конфигуриране на MongoDB Shards с Ansible

  5. Извличане на множество заявени елементи в обектен масив в колекция MongoDB