2016-01-31 2 views
1

У меня очень трудное время, пытаясь удалить объектные объекты из массива с помощью заполненного запроса.удалить document objectid только в заполненном массиве в mongoose

это моя схема

var userSchema = new Schema({ 
    username: String, 
    password: String, 
    books: [{type: Schema.Types.ObjectId, ref: 'Book'}] 
    } 
); 

var bookSchema = new Schema({ 
    bookid: {type:String, unique:true, required:true}, 
    imgURL: String, 
    fortrade: Boolean 
}); 

Проблема с запросом как показано ниже. он удаляет, удаляет элемент схемы книги, когда я хочу, чтобы он удалял objectid в массиве books.

users.findOne({'_id':userid}).populate('books').exec(function(usererr,userdata){ 
     if (usererr) return console.error(usererr); 

     userdata.books.forEach(function(elm,idx){ 
      if(elm.bookid==_book.bookid){ 
       userdata.books[idx].remove(); 
      } 
     }) 
    }); 
+0

У меня такая же проблема. Было бы очень полезно, если вы дадите решение в деталях. –

ответ

5

Если все, что вы хотите сделать, это выбрать refernced поля на выходе соответствующего объекта из .populate(), а затем просто поставить список либо полей, которые вы хотите, или хотите удалить в .populate() вызова :

users.findOne({'_id':userid}) 
    .populate('books',"-_id") 
    .exec(function(usererr,userdata){ 
     // userdata contains related without the _id field 
    }); 

Так второй параметр есть в .populate() определяет поля, которые вы хотите выбрать в последующем запросе. Нотация - означает «исключить» поле, в противном случае вам нужно указать список полей, которые нужно включить.

Это основная проекция поля MongoDB. Одно из правил заключается в том, что вы не можете «смешивать» оба включить или исключить. Поэтому либо быть явными:

.populate('books','bookid imgURL forTrade') 

Или просто exlcude «особых» полей:

.populate('books', '-_id -__v') 

где _id является общим «всегда включены» первичным ключом, и __v является мангустом сгенерированной версии ключа, вы также можете не хотеть результатов.

Также см. Limit Fields to Return in a Query из основной документации, а также синтаксис сокращенного мангуста для этого значения под .select().

+0

Вы спаситель! – Michael

Смежные вопросы