Пн go Ошибка: ошибка дублирования ключа не имеет смысла - PullRequest
0 голосов
/ 30 мая 2020

Привет, друзья-разработчики! Эта ошибка появляется в моей консоли, когда я пытаюсь сохранить два идентичных документа в коллекции в MongoDB, которая не имеет ничего общего с индексом, указанным в ошибке.

Вот ошибка: Коллекция ошибок дублированного ключа E11000: Bohemian.orders index: user.email_1 dup key: {user.email: null}

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

Вот схема и код модели:

const mongoose = require('mongoose');

const orderSchema = new mongoose.Schema({
    amountToPay: Number,
});

const Order = mongoose.model("Order", orderSchema);

module.exports.Order = Order;

Как показано здесь, я всего лишь пытаюсь сохранить сумму, подлежащую выплате, в базу данных в отдельной коллекции.

Вот файл роутера:

const express = require('express');
const router = express.Router();
const { Order } = require('../models/Order');

router.get("/", async (req, res, next) => {
    try {
        const orders = await Order.find();
        if (orders.length === 0) return res.status(404).send("There are currently no orders");
        res.send(orders);
    } catch (ex) {
        console.error(ex);
        next();
    }
});

router.post("/", async (req, res, next) => {
    try {
        const order = new Order({
            amountToPay: req.body.amountToPay
        });
        await order.save();
        res.send(order);
    } catch (ex) {
        console.error(ex);
        next();
    }
});

module.exports = router;

Как вы можете видеть, нет ничего, что связано с ошибкой, которую я получаю, и я понятия не имею, почему я получаю дубликат ключа user.email = null, когда я не упомянул модель пользователя или маршрутизатор.

Вот вызов POST, который я делаю из POSTMAN для тестирования: enter image description here

Довольно прямолинейно, ничего экстремального, ничего запутанного , право? Ну, первый вызов POST сохраняет документ в базе данных, но с тех пор я продолжаю получать ту же ошибку. Единственное, что я могу извлечь из этого, - это то, что когда я сохраняю первый документ, Mon go ищет свойство user.email, когда я создаю новый экземпляр Order, и когда он не находит его, он создает его с значение null, а затем следующий документ, естественно, будет дубликатом, отсюда и ошибка. Но я запутался, потому что эта модель и роутер не должны абсолютно ничего общего с пользовательскими.

Вот ошибка: enter image description here

Так что, пожалуйста, если кто-нибудь может помочь мне понять, почему MongoDB лажает со мной или где я делаю ошибку, я был бы очень признателен.

1 Ответ

0 голосов
/ 30 мая 2020

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

const indexes = await Order.collection.getIndexes();
console.log(indexes);

Затем я удалил их, используя этот метод:

await Order.collection.dropIndexes("user.email_1");

И оттуда все заработало безупречно. Я надеюсь, что это поможет кому-либо в этой ситуации в будущем, и спасибо Molda! :)

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