Mam bazę danych, w której schemat został pierwotnie ustawiony w następujący sposób;

const productSchema = new mongoose.Schema({
  supplier: {
    type: String,
    required: 'Supplier is required',
    ref: 'Supplier'
  },
  name: {
    type: String,
    required: 'Name is required'
  },
  price: {
    type: Number,
    required: 'Price is required'
  }
}) 

Ale teraz chcę zmienić nazwę pola name na product w ten sposób;

const productSchema = new mongoose.Schema({
  supplier: {
    type: String,
    required: 'Supplier is required',
    ref: 'Supplier'
  },
  product: {
    type: String,
    required: 'Product is required'
  },
  price: {
    type: Number,
    required: 'Price is required'
  }
}) 

Wynik, jaki otrzymuję od mojego klienta, nie jest aktualizowany i pokazuje product zamiast name;

Wynik:

[
  {
    "_id": "5df7baa7acf4ed3897d8d4c9",
    "supplier": "Old Co Ltd",
    "name": "Small Woggle",
    "price": 6
  }
]

I wreszcie moja baza danych, w której wypełniam pola mangustą;

mongoose.connect(dbURI, (err, db) => {

  db.dropDatabase()

    .then(() => Product.create([{
      supplier: 'Old Co Ltd',
      product: 'Small Woggle',
      price: 6
    }]))
    .then(products => console.log(`${products.length} products created`))
    .catch(err => console.log(err))
    .finally(() => mongoose.connection.close())
})

Pomóż mi zmienić nazwę tego pola

0
Sensei 19 grudzień 2019, 22:49

2 odpowiedzi

Nie możesz po prostu zmienić nazwy pola w swoim schemacie. Musisz faktycznie przeprowadzić aktualizację.

Przykład:

productSchema.update({}, { $rename: { name: 'product' } }, { multi: true }, (err) => {
  if(err) { throw err; }
  console.log('complete');
});

https://docs.mongodb.com/manual/reference/operator/update/rename/

1
mwilson 19 grudzień 2019, 22:59
Dzięki mwilson, ale muszę uruchomić ten kod w niewłaściwym pliku, ponieważ teraz wyświetla mi ten błąd w terminalu, gdy dodam go do mojego pliku modeli; ``` TypeError: productSchema.update nie jest funkcją ```
 – 
Sensei
19 grudzień 2019, 23:08
ProductSchema.update( ^ TypeError: productSchema.update nie jest funkcją
 – 
Sensei
19 grudzień 2019, 23:12
Zgadywałem, że twój obiekt był dla twojego schematu. Będziesz musiał zaktualizować ten kod, używając tego, co działa dla Ciebie. Może to Product?
 – 
mwilson
19 grudzień 2019, 23:15

Powyższa odpowiedź działa, ale znalazłem też alternatywę bez dodawania czegokolwiek do twojego kodu.

Po prostu wykonaj następujące kroki w ten sposób; 1. W terminalu uruchom mongod 2. Przejdź do bazy danych i usuń bazę danych db.dropDatabase() 3. Następnie zainicjuj bazę danych, uruchamiając node na pliku.

-1
Sensei 19 grudzień 2019, 23:36