sql >> Database >  >> NoSQL >> MongoDB

Mongoose zelfverwezen schema maakt geen ObjectId voor alle subdocumenten

U moet een nieuw object bouwen bij het declareren van uw ingesloten CollectPoint artikelen :

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

Op deze manier de _id en collectPoints wordt aangemaakt door de instantie van CollectPoint anders maak je gewoon een gewoon JSONObject.

Om dit soort problemen te voorkomen, bouwt u een validator voor uw array die een fout zal veroorzaken als de items een verkeerd type hebben:

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

Op deze manier zal het volgende een fout veroorzaken:

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



  1. Verschil tussen Redis AOF en Tarantool WAL log

  2. MongoDB-Escape dots '.' in kaartsleutel]

  3. Spring-data-mongodb multi-tenant maken

  4. MongoDB ISODate-query met PHP