2013-09-09 3 views
1

Здравствуйте, у меня есть эта проблема при проверке наличия субдокумента перед нажатием нового вложенного документа.Mongo: query on subdocs

var UserSchema = new Schema({ 
    name  : String, 
    app_key  : String, 
    app_secret : String, 
    tasks  : [{type: Schema.ObjectId, ref: 'Task'}] // assuming you name your model Task 
}); 

var TaskSchema = new Schema({ 
    name   : String, 
    lastPerformed : Date, 
    folder   : String, 
    user   : {type: Schema.ObjectId, ref: 'User'} // assuming you name your model User 
}); 

С этим, ваш запрос для всех пользователей, включая массивы своих задач могут быть:

User.findOne({...}).populate('tasks').run(function(err, user) { 
    var subdoc = user.tasks.id(mytask.id); 
    if(subdoc){ 
     //not exist 
     //push 
    } 
}); 

Это ошибка:

TypeError: Object has no method 'id' 

ответ

1

Вы получаете эту ошибку, потому что не является полем «id», определенным для поддокумента «задачи». Возможно, вы имели в виду «user.tasks». _id ', который вернет ObjectId, который MongoDB добавляет к своим документам по умолчанию.