2015-12-28 1 views
0

Здесь я пытаюсь сохранить коллекцию с именем courseTitle в базы данных с использованием monggose и nodejs и если коллекция существует с тем же именем (courseTitle) при сохранении, тогда он должен заменить существующую коллекцию . Как я могу заменить существующую коллекцию новой коллекцией всякий раз, когда я сохраняю, не используя remove() и save().заменить целую коллекцию новым с таким же именем, используя мангуст и nodejs

Мой подход: сначала я удалил (удал()) коллекцию, если существует, а затем сохранил (save()) снова с тем же именем.

Есть ли какая-либо другая методика делать то же самое?

var mongoose = require('mongoose'); 
var courseSchema = require('./video-course-events'); 

module.exports.saveEvent = function(req, res){ 
var courseTitle = req.body.CourseDetails.courseTitle; 

var Vcevents = mongoose.model(courseTitle, courseSchema); 
var vcevents = new Vcevents(req.body); 

Vcevents.find(function (err, result){ 
    if(result.length) 
    { 
     // replace the collection(eg, mycourse) with new using same name(ie, mycourse). 
    } 
    else if(err){ 
     console.log('Error occured..!!', err); 
    } 
    else{ 
     vcevents.save(function (err, results){ 
      if(err){ 
       res.json(err); 
      } 
      else{ 
       res.json(results); 
      } 
     });  
    } 
}); 

} 
+1

По какой-либо причине вы хотели бы уничтожить всю коллекцию при сохранении? Это просто кажется очень плохой идеей постоянно делать. В коллекции всегда есть только один документ? – ThrowsException

+0

Да, потому что я запускаю видео, используя эту коллекцию, которая содержит несколько событий как объект. После сохранения нескольких событий (объектов) в первый раз в этой коллекции я могу вернуться и удалить/добавить/изменить любое событие (объект), и оно будет отображаться только в db, когда я нажму кнопку «Сохранить». Сначала я добавляю все события в объект, а затем бросаю этот объект для сохранения/обновления в db. –

+0

Я не вношу изменения непосредственно в db. Сначала все модификации будут храниться в объекте, который содержит несколько событий, а затем сохраняет этот объект в db. –

ответ

0

Вы можете использовать мангуст findOneAndUpdate, чтобы добиться чего-то подобного, не уничтожив коллекцию. Мой мангуст немного шаткий, но я думаю, что это сработает.

Vcevents.findOneAndUpdate({}, vcevents.toObject(), {upsert: true}, function(err, doc){ //execute query }); 

Другим потенциальным вариантом является использование capped collection. вы можете инициализировать размер коллекции. Таким образом, каждая вставка, которую вы делаете, должна избавиться от самого старого документа и заменить его на новейшую. Я никогда лично не использовал ограниченную коллекцию, но это теоретически, как она должна работать в соответствии с документами. Я не знаю, даст ли такой небольшой предел какие-либо проблемы.

db.createCollection("Vcevents", { capped : true, size : 5242880, max : 1 })