使用mongoose更新子目录

时间:2014-12-31 00:15:57

标签: node.js mongodb mongoose mongodb-query

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

我有以下数据库结构:

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 个答案:

答案 0 :(得分: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');
   }
);