2014-12-31 55 views
0

我正在使用猫鼬。我只想更新特定用户订阅的订阅状态。用猫鼬在subdoc上更新

我有以下的数据库结构:

var subscriptionSchema = new mongoose.Schema({     
      subscription_id   :String, 
      start:      String, 
      status:      String, 
      user_id:     String, 
      cancel_at_period_end:  String, 
      current_period_start:  String, 
      current_period_end:   String, 
      ended_at:     String, 
      trial_start:    String, 
      trial_end:     String, 
      canceled_at:    String, 
      quantity:     String, 
      application_fee_percent: String, 
      discount:     String, 
      tax_percent:    String 
     }); 



// define the schema for our user model 
var userSchema = mongoose.Schema({ 
stripe   : { 
    stripe_customer_id: String, 
    default_card:  String   
}, 
subscriptions: [subscriptionSchema], 
cards: [cardSchema] 
}); 

我有这样的代码,它不抛出任何错误,但它并没有任何更新的状态。有任何想法吗? Subscription_id对记录是唯一的。用户可能有多个订阅

var user = require('./models/user'); 

user.update(
    { 
    'subscriptions.subscription_id':updatedsubscription_id 
    }, 
    { 
     status: updatedsubscription_status 
    }, 
    { upsert: true }, function(err, doc){ 
    if (err) return console.log(err); 
    return console.log('updated the subscription in db'); 
} 
); 

回答

1

当ID更新数组元素,你可以使用$ positional operator在您的更新对象,以表示查询匹配的元素的索引:

user.update(
    { 
    'subscriptions.subscription_id':updatedsubscription_id 
    }, 
    { 
     'subscriptions.$.status': updatedsubscription_status 
    }, 
    function(err, count){ 
     if (err) return console.log(err); 
     return console.log('updated the subscription in db'); 
    } 
); 
+0

没错这就是它!大! – Cookiejest