2016-04-13 2 views
3
{ 
    "_id": { 
     "$oid": "5705f793e4b0acd6e2456804a" 
    }, 
    "Categories": [ 
     { 
      "mainmodels": [ 
       { 
        "submodels": [ 
         { 
          "price": "2000", 
          "submodelname": "lumia021", 
          "Remainingphones": "0", 
          "Bookedphones": "0", 
          "Numofphones": "10" 
         } 

        ], 
        "Status": "Active", 
        "modelname": "lumia", 
        "fromdate": "2016-04-01T16:39:12.051Z", 
        "todate": "2016-04-31T19:19:44.051Z" 
       } 
      ], 
      "brand": "nokia" 
     } 
    ], 
    "rank": "1", 
    "name": "kalasipalaya" 
} 

Выше я предоставил свои данные, которые хранятся в базе данных (mongodb). Здесь я хочу обновить Remainingфоны и Bookedphones. Вот Я пытаюсь обновить, но это не обновление, потому что я создал вложенный документ поможет мне сделать этоMongodb Вложенное обновление документа?

Учитывая код, который я написал в Угловом переднего конце сервере

credentials = 
{ 
    "Categories.mainmodels.submodels.Bookedphones": '1', 
    "Categories.mainmodels.submodels.Remainingphones":'9' 
} 
$http.put('http://localhost:3000/phones/' + '5705f793e4b0acd6e2456804a', credentials).success(function(data, status, headers, config, response) { 
}); 

При запуске этого он попадет внутренний сервер маршрут

app.route('/phones/:findId') 
       .get(phones.read) 
       .put(phones.update) 
       .delete(phones.delete); 
app.param('findId', phones.phomesByID); 

для находят ид Я использую этот

exports.phomesByID = function(req, res, next, id) { 

     Phones.findById(id).populate('user', 'displayName').exec(function(err, phones) { 
       if (err) return next(err); 
       if (! phones) return next(new Error('Failed to load Phones ' + id)); 
       req.phones = phones ; 
       next(); 
     }); 
}; 

для обновления я использовал

exports.update = function(req, res) { 
console.log(req.phones); 
     var phones = req.phones ; 

     phones = _.extend(phones , req.body); 
     console.log(phones); 
     phones.save(function(err) { 
       if (err) { 
         return res.status(400).send({ 
           message: errorHandler.getErrorMessage(err) 
         }); 
       } else { 
         res.jsonp(phones); 
       } 
     }); 
}; 

я сделал модель как этот

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 

var submodelSchema = { 
    submodelname: {type:String, required: false}, 
    price: {type:String, required: false}, 
    Remainingphones: {type:String, required: false}, 
    Bookedphones: {type:String, required: false}, 
    Numofphones: {type:String, required: false} 
}; 

submodelSchema = 'new Schema('+ submodeleSchema +',{_id:true})'; 

var typeSchema = { 
    vtype: {type:String, required: false}, 
    mainservices: { 
    Status: {type:String, required: false}, 
    modelname : {type:String, required: false}, 
    fromdate: {type:String, required: false}, 
    todate: {type:String, required: false} 
    }, 
    submodels: [submodelSchema], default:[] 
}; 
typeSchema = 'new Schema('+typeSchema +',{_id:true})'; 

var PhoneSchema = new Schema({ 
     rank: { 
       type: String, 
       default: '', 
       trim: true 
     }, 
     name: { 
       type: String, 
       default: '', 
       trim: true 
     }, 
    Categories: [typeSchema], default:[] 


}); 
mongoose.model('Phone', PhoneSchema); 
+0

Вы получаете какую-либо ошибку? –

+0

нет, я не получаю ошибку. я получаю ответ 200, но когда я проверяю в базе данных, он не обновляется –

ответ

0

Из кода я вижу, что вы не вставлять непосредственно в телефон, но вы делаете массив вложенных документов, в для того чтобы Монго, чтобы понять, что вы пытаетесь сделать, ваш запрос на обновление должно быть что-то таким образом:

var credentials = { 
    "Categories[0].mainmodels[0].submodels.Bookedphones": '1', 
    "Categories[0].mainmodels[0].submodels.Remainingphones":'9' 
}; 

Эта конструкция схемы кажется немного странным, я предлагаю вам пересмотреть его, это не очень интуитивно.

+0

Я тоже пробовал этот, но он не работает –

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