我是这样的架构,我试图使用_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) {
}
答案 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);
});