2016-02-23 6 views
2

У меня есть следующие модели:как эффективно искать поддокументы

var couponschema = new mongoose.Schema({ 
    name: String, 
    couponcode: String 
}); 

var userschema = new mongoose.Schema({ 
    name: String, 
    coupons: [couponschema] 
}); 

Мне нужно найти и удалить все купоны с определенным coupon code.

Не удалось найти какой-либо запрос мангуста пакетное удаление нескольких поддокументов по нескольким документам. Поэтому я остаюсь с итерацией через каждый документ user, затем перебираю подкоды coupon, чтобы увидеть, есть ли соответствующий купон, а затем удалить их - но это не похоже на элегантное решение.

Поэтому, пожалуйста, предложите чистый способ сделать это. Благодарю.

ответ

1

Надеется, что это даст вам представление (используя $pull):

db.user.update(
    { }, 
    { 
    $pull : { 
     "coupons" : <...expression here...> // match specific coupons 
    } 
    }, 
    { multi: true } 
) 

UPDATE:

tUser.update({ 
    'coupons.couponcode': data.regid 
}, { 
    $pull: { 
    coupons: { 
     couponcode: data.regid 
    } 
    } 
}, { multi: true, safe: true }, function (err, val) { 
    // .. do something here 
}); 

Mongoose update API here.

+0

спасибо, но. Я попробую это ... – ShahiM

+0

Эй, это сработало отлично ... это фактический код, который я написал ... пожалуйста, добавьте это в свой ответ, и я соглашусь: 'tUser.update ({'coupons .couponcode ': data.regid}, {$ pull: {coupons: {' coupons.couponcode ': data.regid}}}, {multi: true, safe: true} function (err, val) {}); ' – ShahiM

+0

и ссылка [this] (http://mongoosejs.com/docs/api.html#query_Query-update) тоже помогли. – ShahiM

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