2016-07-05 2 views
1

Я пытаюсь переместить документ в другую коллекцию в MongoDB на основе этого подхода Saving Mongoose object into two collections.Переместить документ в другую коллекцию с помощью Mongoose

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

Чтобы быть более конкретным: в документе у меня есть список задач, которые в конечном итоге будут завершены и затем должны быть перемещены внутри этого документа в другой массив. Однако мне нужно иметь возможность запросить все незавершенные, и это должно быть возможно с двумя коллекциями.

ответ

1

Таким образом, вы должны зарегистрировать схему дважды

let ChangeSchema = new Schema({ 
    title: String, 
    version: Number 
}) 

mongoose.model('First', ChangeSchema) 
mongoose.model('Second', ChangeSchema) 

Тогда вы можете поменять им, нравится

mongoose.model('First').findOne({ _id: id }, function(err, result) { 

    let swap = new (mongoose.model('Second'))(result) 
    /* you could set a new id 
    swap._id = mongoose.Types.ObjectId() 
    swap.isNew = true 
    */ 

    result.remove() 
    swap.save() 

    // swap is now in a better place 

}) 
+0

Я не в состоянии получить это решение для работы. Я получаю сообщение об ошибке 'VersionError: никакого совпадающего документа, найденного для id" 58b1512b8f361b717254fa59 "Почти почти бессмысленно я обнаружил, что если бы я вручную ввел документы в коллекцию первым, тогда я не получил бы такой ошибки, заставив меня поверить, что я отсутствует шаг относительно части id. Может ли кто-нибудь добавить больше деталей к этому решению? – stuffyjoelab

+0

@stuffyjoelab вам нужно иметь документ, чтобы переключиться в первую очередь. 'Совпадающий документ, найденный для id '58b1512b8f361b717254fa59,' 'сообщает вам, что нет документа с его идентификатором. – arcs

+0

Немного поздно, но ... Если свойство '_id' в схеме не установлено в' String', тогда mongoose ожидает объект ObjectId. Если ваш идентификатор является строкой, а mongoose ожидает, что идентификатор объекта использует 'mongoose.Types.ObjectId (id)', заранее проверьте с помощью 'mongoose.Types.ObjectId.isValid (id)' при необходимости – Ben

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