2

我在填充深层时遇到了麻烦。我搜索并阅读了许多页面,但无法解决。

这是我的架构:

var boxSchema = new mongoose.Schema({
    name: {
        type: String,
        unique: true
    }//, required: true
    , height: {
        type: Number
    },//, required: true
    width: {
        type: Number
    },
    sensors: [
    {
        type: mongoose.Schema.ObjectId,
        ref: 'Sensor',
    }

    ]
});

var slotSchema = new mongoose.Schema({
    slotPosition: {
        type: Number,
        unique: true
    },
    startDate: {
        type: Date,
        default: Date.now
    },
    harvestDate: {
        type: Date,
        default: null
    },
    Box_id: {
        type: mongoose.Schema.ObjectId,
        ref: 'Box'
    },
    TypePlant_id: {
        type: mongoose.Schema.ObjectId,
        ref: 'TypePlant'
    }
});


var typePlantSchema = new mongoose.Schema({
    name: {
        type: String,
        unique:true
    },
    expectedHarvestDuration: {
        type: Number,
        default: 0
    },
    expectedPh: {
        type: Number
    },
    expectedTemp: {
        type: Number
    },
    expectedLight: {
        type: Number
    },
    image: {
        type:String
    }

});

var plantRecordSchema = new mongoose.Schema({
    date: {
        type: Date,
        default: Date.now
    },
    rootLength: {
        type: Number
    },
    plantLength: {
        type: Number
    },
    Slot: {
        type: mongoose.Schema.ObjectId,
        ref: 'Slot'
    }
});

我需要返回所有关联的槽数据的目标。从这个链接看到提示后,我创建了代码来做到这一点:

Slot.find({_id:mongoose.Types.ObjectId("5657e204b359fd6c103d0de5")})
.populate('TypePlant_id')
.populate('Box_id')
.exec(function(err,doc){
    Slot.populate(doc,
        {
            path:'Box_id.sensors',
            model:'Sensor'
        },function(err,results){
            console.log(err)
            console.log(results);
        })
});

结果如下:

[ { startDate: Fri Nov 27 2015 11:54:28 GMT+0700 (SE Asia Standard Time),
    harvestDate: null,
    __v: 0,
    slotPosition: 1,
    Box_id: 
     { sensors: [ [Object], [Object], [Object], [Object] ],
       __v: 0,
       width: 200,
       height: 100,
       name: 'testBox',
       _id: 5657e204b359fd6c103d0de0 },
    TypePlant_id: 
     { expectedHarvestDuration: 20,
       __v: 0,
       image: '/images/peppersalad.png',
       expectedTemp: 20,
       expectedPh: 15,
       name: 'dua leo',
       _id: 5657e204b359fd6c103d0ddb },
    _id: 5657e204b359fd6c103d0de5 } ]

如您所见,它不会填充框传感器的内容(传感器:[[Object],[Object],[Object],[Object])

虽然从盒子里,我仍然很好地填充传感器

Box.find({_id: mongoose.Types.ObjectId("5657e204b359fd6c103d0de0")})
    .populate("sensors")
    .exec(function(err,doc){
        console.log(doc);
    });

-----------------------------------------
          Result
-----------------------------------------

[ { sensors: 
     [ { boxId: 5657e204b359fd6c103d0de0,
         __v: 0,
         description: 'A temperature sensor for Outbox',
         name: 'OutTemperature',
         _id: 5657e204b359fd6c103d0de2 },
       { boxId: 5657e204b359fd6c103d0de0,
         __v: 0,
         description: 'A temperature sensor for Inbox',
         name: 'InTemperature ',
         _id: 5657e204b359fd6c103d0de1 },
       { boxId: 5657e204b359fd6c103d0de0,
         __v: 0,
         description: 'sensor for measuring pH',
         name: 'pHSensor',
         _id: 5657e204b359fd6c103d0de3 },
       { boxId: 5657e204b359fd6c103d0de0,
         __v: 0,
         description: 'sensor for measuring Light consumption',
         name: 'Light sensor',
         _id: 5657e204b359fd6c103d0de4 } ],
    __v: 0,
    width: 200,
    height: 100,
    name: 'testBox',
    _id: 5657e204b359fd6c103d0de0 } ]

我也使用插件mongoose-deep-populate,但它仍然给出相同的结果。请帮我从 Slot 中填充传感器的信息。

非常感谢

4

1 回答 1

0

抱歉,我的代码已经从插槽中填充了传感器数据。错误来自console.log,它无法打印出完整的结果。我仍然完全通过点('。')访问数据到它的属性。

于 2015-11-30T04:12:28.677 回答