Я устанавливаю приложение 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));