sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose självreferat schema skapar inte ObjectId för alla underdokument

Du bör bygga ett nytt objekt när du deklarerar din inbäddade CollectPoint objekt :

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

På detta sätt _id och collectPoints kommer att skapas med hjälp av CollectPoint annars skapar du bara ett vanligt JSONObject.

För att undvika den typen av problem, bygg en validator för din array som kommer att utlösa ett fel om dess objekt har fel 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'
        }
    }
});

På så sätt kommer följande att utlösa ett fel:

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



  1. MongoDb aggregation $match error :Argument måste vara aggregerade pipeline-operatörer

  2. Behöver en distinkt räkning på flera fält som har sammanfogats från en annan samling med hjälp av mongodb aggregeringsfråga

  3. console.log visar inte förväntade objektegenskaper

  4. En översikt över MongoDB och lastbalansering