Как исправить (Mongoose: Ошибка 11000), когда Passed в Data является совершенно новым и отличается в collectionName.create (newData, - PullRequest
1 голос
/ 03 июня 2019

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

Единственная проблема заключается в том, что когда я выполняю MongoDBCollectionName.create (data, (err, newTrip) => {...}), я получаю ту же ошибку (после того, как в коллекции есть 1 документ):

ОШИБКА сообщена при создании поездки из драйвера ... {MongoError: E11000 коллекция дубликатов ошибок ключа: hitchhiqe.trips index: username_1 dup key: {: null}

Теперь я не понимаю, откуда взялся index: username_1, потому что ни одно из полей в моем документе mongo не содержит username_1.

Очень ценю любую помощь.

Я попробовал следующее:

  1. Установить для разреженного значение true. Но это ничего не сделало.
  2. В настоящее время я храню данные в глобальной переменной (я знаю, что это плохая практика программирования, но это необходимо для этого проекта, потому что я держу данные на нескольких почтовых маршрутах, прежде чем окончательно сохранить их).
  3. Я думал, что глобальная переменная могла вызвать некоторые проблемы (хотя console.log (global.data) печатает целые данные каждый раз. Поэтому я сохранил новые данные в локальной переменной внутри Post Route. Но все равно выдает ошибку: 11000
  4. Я использую res.locals для сбора данных от текущего пользователя. Итак, в глобальной переменной (которая является объектом объектов (см. Код ниже)) я передаю значение для некоторых ключей как req.user.username или req.user.birthday. Я не думаю, что это может быть проблемой, поскольку я уже установил значение для таких полей в MongoDB как {unique: false}

  5. Я прошел почти все посты на Stackoverflow и YouTube с ошибкой: 11000, но, что бы я ни пытался (я реализовал разбор из одного из сообщений stackoverflow), я все равно получаю ту же ошибку.

  6. Я использовал mongoose.Promise = global.Promise; Но это ничего не сделало (кто-то в stackoverflow рекомендовал это).

  7. Я действительно нуждаюсь в помощи. Я пытался отлаживать его в течение нескольких дней, но безуспешно. У меня болит голова. СПАСИБО за помощь!

ЗДЕСЬ МОЯ схема mongoDB - Поездка -:

var mongoose = require("mongoose"),
    passportLocalMongoose = require("passport-local-mongoose");

var TripSchema = new mongoose.Schema({
    // Destination and price for each point
    Trip : 
    {
        // Where is the user leaving from (no price, obviously)
        from : 
        {
            destination : String
        },

        //First via point (if applicable)
        A : 
            {
                destination : {type : String, sparse : true},
                price : {type : Number, sparse : true}
            },
        //Second via point (if applicable)
        B : 
            {
                destination : {type : String, sparse : true},
                price : {type : Number, sparse : true}
            },    
        // Final Destination (REQUIRED)
        C : 
            {
                destination : {type: String, sparse : false},
                price : {type : Number, sparse : false}
            }
    },   
    // Leaving date, time, and the number of seats available
    Logistics : 
        {
            date : String, //When the user is leaving
            time : String, // Time the user is leaving
            ejsTimePosted : String, //Time ejs will start hiding the event
            seats : Number, // Number of seats available
            totalDuration : Number,
            totalDistance : Number,
            ejsTimeDeleted : Number //Time to send user an email about trip
        },

    dateCreated : String, //date this ride was made available

    // Information about the user who posted/requested a ride 
    Driver : {
        note : String,
        name : {type : String, unique : false},
        email : {type : String, unique : false},
        phone    : String,
        profilePicture : String,
        sex : String,
        carImages : String,
        car        : String,
        university : String,
        graduationYear : String
    }
});

TripSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("Trip", TripSchema);

Здесь я получаю данные от пользователя (это прежде, чем я что-то сохраняю в БД):

Вот ГЛОБАЛЬНАЯ переменная, TripInformation:

global.TripInformation = {
  Trip :
  {
     from : 
     {
      destination : req.body.from.split(",").slice(-3).toString().trim()
     },
     A : 
     {
      destination : first_via_point.trim(),
      price       : req.body.first_via_point_price
     },
     B : 
     {
     destination : second_via_point.trim(),
     price       : req.body.second_via_point_price
     },
     C : 
     {
     destination : req.body.to.split(",").slice(-3).toString().trim(),
     price       : req.body.final_destination_price
     },
     },
     Logistics : 
     {
     date : req.body.leaving_date,
     time : req.body.leaving_time,
     ejsTimePosted : toTimestamp(req.body.leaving_date+", "+ req.body.leaving_time),
     seats : req.body.seats_available,
     totalDistance : parseFloat(tD/1609.344).toFixed(1),
     totalDuration : parseFloat(parseFloat(tS/3600).toFixed(1)),
     ejsTimeDeleted : departureT + tS
     },
    dateCreated : moment().format('MMMM Do YYYY, h:mm:ss a'),
      Driver : {
       note : req.body.note,
       name : req.user.name,
       email : req.user.username,
       phone    : req.user.phone,
       profilePicture : req.user.profilePicture,
      sex : req.user.sex,
       carImages : req.user.Driver.carImages,
        car       : req.user.Driver.car,
       university : req.user.university,
       graduationYear : req.user.graduationYear
   }
};

КАК ВЫ МОЖЕТЕ УВИДЕТЬ, я сохранил его в глобальной переменной.

ПРИМЕЧАНИЕ: toTimeStamp () - это функция, которая преобразует читаемое человеком время в метку времени (я определил ее как глобальную функцию)

Теперь, это в другом МАРШРУТЕ.

После этого я отправляю пользователей по маршруту «Предварительный просмотр», где они могут просмотреть введенные данные. Если они подтверждают, они перенаправляются на маршрут ПОДТВЕРЖДЕНИЯ, где я сохраняю их данные в документе Trip (название моей коллекции).

Вот код:

router.post("/confirm-route", function(req, res){

    Trip.create(global.TripInformation, function(err, newTrip){
        if(err)
        {
            console.log("ERROR reported while creating a trip from the driver...", err);
            return res.redirect("/drive/new");
        }
        else
        {
             console.log(newTrip, 'SUCCESS!!!');

            return res.redirect("/marketplace");
        }

    });
})

Вот фактическое сообщение об ошибке:


Everytime there's at least 1 document in the collection, the following error is produced : 

ERROR reported while creating a trip from the driver... { MongoError: E11000 duplicate key error collection: hitchhiqe.trips index: username_1 dup key: { : null }
    at Function.create (C:\Users\qasim\Desktop\Exigence\HItchhiqe\source code\src\node_modules\mongodb-core\lib\error.js:43:12)
    at toError (C:\Users\qasim\Desktop\Exigence\HItchhiqe\source code\src\node_modules\mongodb\lib\utils.js:149:22)
    at coll.s.topology.insert (C:\Users\qasim\Desktop\Exigence\HItchhiqe\source code\src\node_modules\mongodb\lib\operations\collection_ops.js:859:39)
    at C:\Users\qasim\Desktop\Exigence\HItchhiqe\source code\src\node_modules\mongodb-core\lib\connection\pool.js:397:18
    at process._tickCallback (internal/process/next_tick.js:61:11)
  driver: true,
  name: 'MongoError',
  index: 0,
  code: 11000,
  errmsg:
   'E11000 duplicate key error collection: hitchhiqe.trips index: username_1 dup key: { : null }',
  [Symbol(mongoErrorContextSymbol)]: {} }

СЕЙЧАС, единственная проблема в том, что данные совершенно разные, буквально все. Кроме того, я понятия не имею, откуда взято username_1 в ключе dup. Я попытался рефакторинг своего кода, но я продолжаю получать те же результаты. Я использовал аналогичные методы в моих предыдущих проектах (за исключением глобальных переменных, потому что они мне там не нужны), но там они отлично работают.


P.s, это мой первый пост на stackoverflow. Итак, если этот вопрос кажется много, мои извинения. Я определенно сделаю следующий вопрос намного короче, ха-ха.

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

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