Как переместить документ в другую коллекцию, используя Mongoose с node.js - PullRequest
0 голосов
/ 09 мая 2019

Я устанавливаю приложение Node.js / Express с mongodb. Я использую мангуста, чтобы делать все, что связано с mongodb.

Сначала я хочу добавить новый документ в коллекцию "pendingOrders", а затем я хочу переместить этот документ в коллекцию "activeOrders".

Создать документ -> Сохранить в "pendingOrders" -> Делать вещи -> Переместить документ в "activeOrders" -> Сохранить в "activeOrders".

Я уже попробовал этот ответ из другого поста. Получил мне эту ошибку:

DocumentNotFoundError: Документ не найден для запроса "{_id: 5cd48dba5c618c343a117bd4}"

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

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

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

    let swap = new (mongoose.model('Second'))(result)
    swap._id = mongoose.Types.ObjectId()

    result.remove()
    swap.save()

    // swap is now in a better place

});

Это мой текущий код, который мне дает смысл:

// require mongoose and make connection
const pendingOrder = require('../models/pendingOrder');
const activeOrder = require('../models/activeOrder');

// Create the new pending order with data
const newPendingOrder = new pendingOrder({
        branche: branche,
        stilartType: stilartType,
        animationType: animationType,
        animationHovedrolle: animationHovedrolle,
        animationPlatform: animationPlatform,
        themecolor: themecolor,
        animationCompanyAudience: animationCompanyAudience,
        animationCompanyLink: animationCompanyLink,
        animationCompanyLogo: animationCompanyLogo,
        animationManuscript: animationManuscript,
        orderUserReepayHandle: user.reepayCustomer,
        orderUserEmail: user.email,
        orderTotal: 0,
        animationManuscriptWordcount: wordsCount,
        orderTitle: "Animationsvideo"
    });

// Save the pending order and return the saved order to "pendingOrderSaved"
    newPendingOrder.save().then(pendingOrderSaved => {
        if (pendingOrderSaved) {
// create a new active order from the "pendingOrderSaved" data.
            const newActiveOrder = new activeOrder(pendingOrderSaved);
// save the newActiveOrder
            newActiveOrder.save().then(activeOrderSaved => {
                if (activeOrderSaved) {
// remove the pendingOrderSaved
                    pendingOrderSaved.remove();
                    console.log("Pending Order deleted and inserted into active order.");
                    res.send("Working");
                }
            }).catch(err => console.log(err));
        }
    }).catch(err => console.log(err));

Я ожидаю, что он сначала создаст его в "pendingOrders", а затем мгновенно удалит его из "pendingOrders" и переместит в "activeOrders". На самом деле происходит следующее: когда он пытается сохранить «activeOrder» в «activeOrders», он выдает ошибку:

Не найден документ для запроса "{_id: 5cd490561d49de2c46e306f5}

Я не понимаю эту ошибку, так как я просто сохраняю и не ищу никаких документов с таким идентификатором. Ошибка все еще случается, если я удаляю pendingOrderSaved.remove()

РЕДАКТИРОВАТЬ, Я РЕШЕН ЭТО!

Я решил проблему, добавив toObject(); в свой ответ pendingOrderSaved объект, который я получил от добавления.

Решенный код выглядит так:

newPendingOrder.save().then(pendingOrderSaved => {
        if (pendingOrderSaved) {
            pendingOrderSaved.remove().then(orderRemoved => {
                newActiveOrder = new activeOrder(orderRemoved.toObject());
                newActiveOrder.save();
            }).catch(err => console.log(err));
        }
    }).catch(err => console.log(err));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...