如何有效地搜索子文档

时间:2016-02-23 21:00:02

标签: node.js mongodb mongoose

我有以下型号:

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

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

我需要查找并删除特定coupon code的所有优惠券。

我找不到任何mongoose查询批量删除多个文档的多个子文档。因此,我会遍历每个user文档,然后循环遍历coupon子文件以查看是否存在匹配的优惠券,然后将其删除 - 但这似乎并非如此优雅的解决方案。

所以请建议一个干净的方法来做到这一点。感谢。

1 个答案:

答案 0 :(得分:1)

希望它会给你一个想法(使用$pull):

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

<强>更新

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