Как исправить ошибку «Не удается вставить ключ неопределенный, он нарушает ограничение уникальности» в NeDB? - PullRequest
1 голос
/ 12 апреля 2019

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

Ошибка:

"Невозможно вставить ключ не определено, это нарушает ограничение уникальности."

Я делаю приложение в электрон-vue .

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

ЦСИ \ визуализатор \ datastore.js

import Datastore from 'nedb'
import path from 'path'
import { remote } from 'electron'
export default new Datastore({
  autoload: true,
  filename: path.join(remote.app.getPath('userData'), '/data.db')
})

ЦСИ \ визуализатор \ main.js

import db from './datastore'
Vue.prototype.$db = db

ЦСИ \ визуализатор \ компоненты \ MyApp.vue

<template>
  <div>
    <form v-on:submit.prevent="insertShelf">

      <ul>
        <li>
          <label>Shelf Number</label>:
          <input type="text" name="shelfNum" v-model="newInput.shelfNum">
        </li>
      <ul v-for="(book, index) in newInput.books">
        <li>
          <label>Title</label>:
          <input type="text" name="title" v-model="book.title">
        </li>
        <li>
          <label>Author</label>:
          <input type="text" name="author" v-model="book.author">
        </li>
      </ul>
      <input type="submit" value="Submit">
    </form>
  </div>
</template>

<script>
export default {
  data () {
    return {
      newInput: {
        shelfNum: '',
        books: [
          {
            title: '',
            author: ''
          }
        ]
      },
      shelfList: []
    }
  },
  watch: {
    shelfList: {
      handler: function () {
        this.$db.insert(JSON.stringify(this.shelfList), function (err, newDoc) {
          console.log('err', err)
          console.log('newDoc', newDoc)
        })
      }
    }
  },
  methods: {
    insertShelf: function () {
      this.shelfList.push({
        shelfNum: this.newInput.shelfNum,
        books: this.newInput.books
      })

      this.newInput = {
        shelfNum: '',
        books: [
          {
            title: '',
            author: ''
          }
        ]
      }
    }
  }
}
</script>

В первый раз данные, которые я заполнил и отправил, успешно сохраняются, но со второго раза произошла ошибка.

Файл базы данных (C: \ Users \ myaccount \ AppData \ Roaming \ Electron \ data.db) имеет только это:

"[{\"shelfNum\":\"12345\",\"books\":[{\"title\":\"Winnie-the-Poo\",\"author\":\"A. A. Milne\"}]}]"

и _id полевая доза не генерируется.

Пожалуйста, помогите мне.

...