Accountant.accounts index: dailySummary.dailyCreatedAt_1 dup ключ: {dailySummary.dailyCreatedAt: null} - PullRequest
0 голосов
/ 13 апреля 2020

Ниже приведена моя схема пользователя

const userSchema = new mongoose.Schema(
  {
    email: {
      type: String,
      required: true,
      trim: true,
      unique: true
    },
    password: {
      type: String,
      required: true
    },
    name: {
      type: String,
      required: true
    },
    accessToken: {
      type: String
    }
  },
  {
    timestamps: true
  }
);
const User = mongoose.model("User", userSchema);

module.exports = User;

Ниже приведена схема моей учетной записи

const accountSchema = new Schema(
  {
    user: {
      type: Schema.Types.ObjectId,
      ref: "User",
    },
    dailySummary: [
      {
        dailyCreatedAt: {
          type: String,
          trim: true,
        },
        profit: {
          type: Number,
        },
        expenditure: {
          type: Number,
        },
        income: {
          type: Number,
        },
      },
    ],
    monthlySummary: [
      {
        monthlyCreatedAt: {
          type: String,
          trim: true,
        },
        lastUpdated: {
          type: String,
        },
        profit: {
          type: Number,
        },
        expenditure: {
          type: Number,
        },
        income: {
          type: Number,
        },
      },
    ],
    yearlySummary: [
      {
        year: {
          type: Number,
        },
        lastUpdated: {
          type: String,
        },
        profit: {
          type: Number,
        },
        expenditure: {
          type: Number,
        },
        income: {
          type: Number,
        },
      },
    ],
  },
  { timestamps: true }
);

const Account = model("Account", accountSchema);
module.exports = Account;

Вот как я ее использую в своем контроллере

const Account = require("../models/Account");

Я пытаюсь создать учетную запись для пользователя, если у него ее нет. Код для этого следующий:

createAccount: async (req, res) => {
    const user = req.user;
    try {
      let account = await Account.findOne({ user: user._id });
      if (!account) account = await Account.create({ user: user._id });
      res.json({ statusCode: 200, account });
    } catch (err) {
      console.log(err.message);
      res.status(500).json({ statusCode: 500, message: "Server Error" });
    }
  }

ОШИБКА

E11000 duplicate key error collection: Accountant.accounts index: dailySummary.dailyCreatedAt_1 dup key: { dailySummary.dailyCreatedAt: null }

createAccount отлично работает при вызове для первого пользователя. Когда он вызывается для другого пользователя, он показывает вышеуказанную ошибку.

Если я добавлю несколько фиктивных значений для учетной записи, созданной для первого пользователя, то createAccount для второго пользователя будет работать.

FYI - req.user содержит _id, имя, адрес электронной почты, пароль, accessToken

Plz, дайте мне знать, что я делаю неправильно

...