2016-02-23 102 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 
}); 

猫鼬update API here

+0

谢谢,但。我会尝试一下... – ShahiM

+0

嘿...这工作完美...这是我写的实际代码...请将此添加到您的答案,我会接受:'tUser.update({'coupons (multi,true,safe:true)。 function(err,val){} .couponcode':data.regid}, {$ pull:{coupons:{'coupons.couponcode':data.regid}}}, { );' – ShahiM

+0

和[this](http://mongoosejs.com/docs/api.html#query_Query-update)链接也有帮助。 – ShahiM