MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Schemat Mongoose nie tworzy identyfikatora obiektu dla wszystkich dokumentów podrzędnych

Powinieneś zbudować nowy obiekt, kiedy deklarujesz swój osadzony CollectPoint przedmioty :

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

W ten sposób _id i collectPoints zostanie utworzony przez instancję CollectPoint w przeciwnym razie tworzysz zwykły obiekt JSONObject.

Aby uniknąć tego rodzaju problemów, zbuduj walidator dla twojej tablicy, która wywoła błąd, jeśli jej elementy mają niewłaściwy typ :

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

W ten sposób następujące zdarzenia wywołają błąd:

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. Kontroler Express node.js nie czeka na manipulację danymi i zwraca stare dane

  2. Jak znaleźć osadzony dokument w MongoDB?

  3. Aktualizacja do ClusterControl Enterprise Edition

  4. Sformatuj liczbę jako procent w SQL

  5. Jak mogę używać not like na laravel mongodb?