Saya baru saja mendapatkan masalah aneh ini di mana kode di bawah ini mengembalikan refno untuk semua Objek dalam array seperti yang diharapkan Tapi

let records = await Expense.find({}).exec();      // records is an array of objects [{},{}]
  for (let obj of records) {                   // the obj has a refno property which i want to change
    obj.refno = 0                             // this works as expected by changing refno property to 0
  }
console.log(records)

kode kode di bawah ini untuk mengubah nilai properti menjadi string Tidak berfungsi

 for (let obj of records) {
    obj.refno = "QM"+obj.refno
  }
console.log(records)                       // IN this the refno. doesnt change

Persyaratan saya adalah mengubah refno menjadi string

//the object
{
 _id: 5efed2c813b03d331e4dc052,
    refno: 102,
    project: 'EV Battery Pack',
    invoiceno: 'dia',
    description: 'black frame',
    date: '2020-07-03',
}

Jadi mengubah properti ke nomor lain berfungsi tetapi tidak ke string, saya tidak mengerti bagaimana ini terjadi atau apakah saya melewatkan sesuatu?, lagian saya menyiasatinya dengan mendeklarasikan properti lain dan menyimpan string di dalamnya tetapi saya tidak tahu mengapa int tidak bisa diubah menjadi string di dalam objek

Dapatkah seseorang menjelaskan mengapa ini terjadi
terimakasih atas bantuannya

Sunting: skema pengeluaran

var schema = new Schema({
  refno: { type: Number, require: true },
  project: { type: String, require: true },
  projectid: { type: Number, require: true },
  invoiceno: { type: String, require: true },
  description: { type: String, require: true },
  date: { type: String, require: true },
  INR: { type: Number, require: true },
  USD: { type: Number, require: true },
  remarks: { type: String, require: true },
});

1
mohamed Arshad 3 Juli 2020, 11:39

1 menjawab

Jawaban Terbaik

Hasil dari panggilan .find().exec() Anda adalah dokumen luwak yang tidak memungkinkan untuk mengubah nilainya jika tipe data yang dihasilkan tidak sesuai dengan batasan skema.

Namun, Anda dapat menggunakan .lean() (lihat https://mongoosejs.com/ docs/api.html#query_Query-lean) pada dokumen luwak yang akan mengubahnya menjadi objek js biasa yang kemudian dapat Anda modifikasi secara sewenang-wenang:

let records = await Expense.find({}).exec().lean(); 
2
eol 3 Juli 2020, 08:53