Kesalahan Pemeran: Pemeran ke String gagal mendapatkan nilai saat mencoba menemukannya

Saya mendapat masalah yang sangat aneh di sini, saya dapat menyimpan data melalui luwak tetapi tidak dapat melakukan kueri. Ini kodenya:

const mongoose = require('mongoose');
const Schema   = mongoose.Schema;

const CategorySchema = new Schema({
  store : {type: String, required: true, unique: true},
  categories : [{
    parent : String,
    name : String,
  }],
});

CategorySchema.index({store: 1, update_at: -1});

module.exports = mongoose.model('Category', CategorySchema);

Ketika saya mencoba melakukan kueri, saya mendapatkan kesalahan ini:

(node:7412) UnhandledPromiseRejectionWarning: Penolakan janji yang tidak tertangani (id penolakan: 1): ValidationError: CastError: Cast to String gagal untuk nilai "{ _id: 58dd019b1a06731b0990b878, store: 'Store-Name-Here', kategori: [], __v: 0 }" di jalur "toko"

Saya mendapatkan skema yang sangat mirip untuk koleksi lain, semuanya berfungsi dengan baik tetapi tidak untuk yang ini.

Inilah cara saya melakukan kueri:

Category.findOne({store: 'Store-Name-Here'}).exec().then(result => console.log(result), err => console.log(err));

Dan

Category.find().exec(function(err, result) {
    if (err)
        return next(err);
    console.log(result);
})

person qwang07    schedule 30.03.2017    source sumber
comment
bagaimana kamu menanyakannya? tolong tambahkan fungsinya   -  person Sravan    schedule 30.03.2017
comment
Category.findOne({store: 'Nama-Toko-Di Sini'}).then(store =› {/*sesuatu di sini*/}, err =› {/*err di sini*/});   -  person qwang07    schedule 30.03.2017
comment
sekali coba, Category.findOne({store: "Store"}).then(store => {/*something here*/}, err => {/*err here*/});, dan periksa apa yang terjadi   -  person Sravan    schedule 30.03.2017
comment
Ini mengembalikan nol   -  person qwang07    schedule 30.03.2017
comment
kesalahannya hilang? sementara kamu memberikan itu?   -  person Sravan    schedule 30.03.2017
comment
Yap, tidak salah ketika mencoba mencari sesuatu yang tidak ada.   -  person qwang07    schedule 30.03.2017
comment
Masalahnya mungkin 'Store-Name-Here' atau bahkan penanganan panggilan balik api yang berhasil   -  person Sravan    schedule 30.03.2017
comment
Pertama coba gunakan tanda kutip ganda, atau nama yang tidak memiliki -(tanda hubung)   -  person Sravan    schedule 30.03.2017
comment
Ya, tapi saya mendapatkan yang sangat mirip yang mencari string yang persis sama dan api sukses memanggil kembali, dan berfungsi dengan baik.   -  person qwang07    schedule 30.03.2017
comment
jadi penanganannya mungkin ada masalah, errornya mengarah ke nomor baris yang mana?   -  person Sravan    schedule 30.03.2017
comment
Kesalahan hanya akan muncul ketika saya mencoba yang benar seperti: Kategori.find() atau Kategori.findOne(). Tidak masalah ketika saya mencoba mencari semuanya atau yang spesifik.   -  person qwang07    schedule 30.03.2017
comment
Tidak ada nomor baris yang muncul di pesan kesalahan, saya telah menempelkan semuanya di sini.   -  person qwang07    schedule 30.03.2017
comment
Saya pikir outputnya datang sebagai array, tetapi Anda menanganinya sebagai string. Tempel penanganan kode   -  person Sravan    schedule 30.03.2017
comment
Kategori.findOne({toko: 'Nama-Toko-Di Sini'}).exec().then(hasil =› { console.log(hasil); return res.status(200).json({'pesan': hasil }); }, salah =› berikutnya(salah));   -  person qwang07    schedule 30.03.2017
comment
Category.findOne({store: 'Store-Name-Here'}).exec().then(result => { console.log(result);}, err => next(err)); , cukup console.log(result) dan periksa apakah kesalahan masih berlanjut   -  person Sravan    schedule 30.03.2017
comment
Ya, masih di sini.   -  person qwang07    schedule 30.03.2017
comment
Reposne akan datang ke success atau error?   -  person Sravan    schedule 30.03.2017
comment
@qwang adalah 'Store-Name-Here' secara harfiah nilai yang Anda tanyakan, atau apakah Anda meneruskan semacam variabel yang berisi string itu? Sepertinya Anda meneruskan dokumen Mongoose alih-alih string. Juga, apakah Anda memiliki hook/middleware untuk model Category?   -  person robertklep    schedule 30.03.2017
comment
@Sravan Permintaan akan terus berlanjut hingga waktu habis.   -  person qwang07    schedule 30.03.2017
comment
@robertklep 'Nama-Toko-Di Sini' adalah nilai yang saya gunakan. Karena itu hanya untuk ujian. Dan tidak ada middleware lain untuk model tersebut.   -  person qwang07    schedule 30.03.2017
comment
Url permintaannya adalah api.localhost:3000/store/Store-Name-Here/categories/, terima melalui router.get('/store/:storename/categories', Category.list)   -  person qwang07    schedule 30.03.2017
comment
@qwang mungkinkah dokumen di database rusak? Bahwa properti store dokumen adalah objek, bukan string?   -  person robertklep    schedule 30.03.2017
comment
Saya rasa tidak, karena Anda dapat melihat dokumen tersebut telah dikeluarkan dari database. Itu pasti sebuah string.   -  person qwang07    schedule 31.03.2017
comment
Masalahnya mungkin ada pada penanganan janji, sebagai ganti exec(), coba dua fungsi panggilan balik untuk success dan error. seperti, function(){}   -  person Sravan    schedule 31.03.2017
comment
@Sravan menangani pengecualian tidak memperbaiki penyebab masalah.   -  person robertklep    schedule 31.03.2017
comment
@qwang dapatkah Anda menambahkan output berikut (dijalankan dari shell MongoDB) ke pertanyaan Anda: db.categories.find({ store: 'Store-Name-Here' }) (atau bahkan, jika hanya ada sedikit dokumen di database, db.categories.find())   -  person robertklep    schedule 31.03.2017
comment
@robertklep, saya tidak mencoba menangani pengecualian, saya mencoba mencari dari mana pengecualian itu berasal.   -  person Sravan    schedule 31.03.2017
comment
@Sravan Mongoose sedang mencoba memasukkan objek (atau dokumen Mongoose, tidak yakin) ke string, dan gagal. Ini adalah hasil dari pertanyaan yang ditampilkan, yang membuat saya percaya bahwa mungkin ada dokumen yang salah dalam database (karena pada dasarnya kami mengesampingkan semua kemungkinan lainnya).   -  person robertklep    schedule 31.03.2017
comment
Saya rasa saya menemukan masalahnya. Saya mencoba menambahkan metode statis ke skema kategori bernama CategoryScheme.static.init(). Setelah saya menghapus metode itu, semuanya berfungsi dengan baik. Saya pikir mungkin sudah ada metode bernama init() karena beberapa alasan, dan saya membuat metode yang dapat menimpanya. Itu menyebabkan kesalahan.   -  person qwang07    schedule 04.04.2017


Jawaban (1)


Saya rasa saya menemukan masalahnya. Saya mencoba menambahkan metode statis ke skema kategori bernama CategoryScheme.static.init(). Setelah saya menghapus metode itu, semuanya berfungsi dengan baik. Saya pikir mungkin sudah ada metode bernama init() karena alasan tertentu, dan saya membuat metode yang mungkin mengesampingkannya. Itulah yang menyebabkan kesalahan tersebut.

person qwang07    schedule 04.04.2017