sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongoose selvrefererende skema opretter ikke ObjectId for alle underdokumenter

Du bør bygge et nyt objekt, når du erklærer dit indlejrede CollectPoint elementer:

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

På denne måde er _id og collectPoints vil blive oprettet ved hjælp af CollectPoint ellers opretter du bare et almindeligt JSONObject.

For at undgå den slags problemer skal du bygge en validator for dit array, der vil udløse en fejl, hvis dets elementer har forkert type :

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

På denne måde vil følgende udløse en fejl :

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



  1. Installation af Redis på Ubuntu 16.04/18.04

  2. Sådan gør du Left Join i DB (Mongo)

  3. MongoDB-opdatering med tilstand

  4. MongoDB-projektion af indlejrede arrays