无法查询子文档mongoose

时间:2017-01-17 18:08:22

标签: mongodb mongoose

我是这样的架构,我试图使用_id从阵列中获取文档。这是我工作的第一个Mongo项目,请帮助我如何实现。我基本上想要检索对应于id的子文档并更新一些数据。

    var PhoneSchema = new mongoose.Schema({
            type: String,
            number: String
        });

        var StudentSchema =  new mongoose.Schema({
            name: String,
            dept: String,
            phone: [PhoneSchema]    
        });

var Phone = mongoose.model('Phone',PhoneSchema);
var Student = mongoose.model('Student',StudentSchema);

我尝试过以下方法,但没有一种方法可行。

方法1:当我在控制台中尝试相同时,它会给我父文档以及与phoneId对应的子文档

Student.findOne({"phone._id":new mongoose.Schema.Types.ObjectId(phoneId) }, {'phone.$':1}, function(err,     student)       { 

}

方法2:根据用于检索子文档的mongoose文档,在这种情况下我得到异常,说电话未定义

Student.phone.Id(phoneId); 

我已通过从以下查询中删除架构来修复此问题

Student.findOne({"phone._id":new mongoose.Types.ObjectId(phoneId) }, {'phone.$':1}, function(err,     student)       { 

}

1 个答案:

答案 0 :(得分:2)

我试图解决你的要求。以下代码完成了这项工作。

var PhoneSchema = new mongoose.Schema({
            type: String,
            number: String
        });

var StudentSchema =  new mongoose.Schema({
            name: String,
            dept: String,
            phone: [PhoneSchema]    
        });

var Phone = mongoose.model('Phone',PhoneSchema);
var Student = mongoose.model('Student',StudentSchema);

var newPhone = new Phone({
    type: 'ios', number: '9030204942'
});

var newStudent = new Student({
    name:'Pankaj',
    dept:'cse',
    phone:newPhone
});

// newStudent.save(function(err, ph) {
//     if (err) return console.error(err);

// });

Student.findOne({"phone._id":mongoose.Types.ObjectId('587e6409e06170ba1708dc21') },{_id:0,phone:1}, function(err,     phone)       { 
        if(err){
            console.log(err)
        }
        console.log(phone);
});

使用结果查找以下屏幕截图 enter image description here