2017-09-15 18 views
0

私はこのようなスキーマを持っている:mongooseメソッドでfieldNameを変更する方法+スキーマでfieldNameを変更する方法はありますか?

const StorySchema = new Schema({ 
    authorId: String, 
    title: String, 
    longUrl: String, 
    shortUrl: String, 
    comment: String, 
    category: String, 
    author: String, 
    date: { type: Date, default: Date.now, index: true }, 
    votes: { type: Number, default: 1, index: true }, 
}); 

私はvotesCount呼ばれるスキーマに、私は実際にスキーマを変更すると同時に、票のフィールドを変更します。

私は同じファイルでこれらを行うだけですか?

const StorySchema = new Schema({ 
    authorId: String, 
    title: String, 
    longUrl: String, 
    shortUrl: String, 
    comment: String, 
    category: String, 
    author: String, 
    date: { type: Date, default: Date.now, index: true }, 
    votesCount: { type: Number, default: 1, index: true }, 
}); 

const StoryModel = mongoose.model('story', StorySchema); 

StoryModel.update({}, { $rename: { votes: 'votesCount' } }, { multi: true, strict: false }, function(err, blocks) { }); 

またはコード内でこれをまったく実行しないでください。私は決してデータベーススキーマの変更を扱っていないので、スキーマの変更を適用する方法と場所はわかりません。

+0

の名前を変更$使用してフィールド名を置き換えるよりも、生産で実行されているプロジェクトは、あなたの新しいコントローラを更新する場合は交換をお勧めします。実行時にモデルのスキーマを変更するには、現在のモデルの登録を解除して、新しいスキーマの変更で再度登録する必要があります。あなたがやっていることが「プロダクションに変更を配備する」のであれば、プログラムのアクセスを一時的に停止し、実際のデータを更新してから、変更したコードで再起動してください。 –

答えて

0

[スキーマ]フィールドで使用する名前はコントローラ内の名前と同じにする必要があるため、スキーマとコントローラで変更します。

例:

const StorySchema = new Schema({ 

authorId: String, 
title: String, 
longUrl: String, 
shortUrl: String, 
comment: String, 
category: String, 
author: String, 
date: { type: Date, default: Date.now, index: true }, 
votesCount: { type: Number, default: 1, index: true }, 
}); 

お使いのコントローラで

let form = { 
      authorId:req.body.*****, 
      title:req.body.*****, 
      longUrl:req.body.*****, 
      shortUrl:req.body.*****, 
      comment:req.body.*****, 
      category:req.body.*****, 
      author:req.body.*****, 
      date:req.body.*****, 
      votesCount:req.body.***** 
     }; 

注:主なポイントここにしようとしていますが、非常にあなたがスキーマで使用される名前、ということであるにも同じ名前あなたはのためのつもり使用している必要がありますあなたのコントローラ。

私はこれがあなたの質問に答えてくれることを願っています。

0

あなたのコントローラで

db.students.updateMany({}, { $rename: { "nmae": "name" } }) 

と変化として最もよく使用updateManyまたは直接新しいフィールド名ところ、これまで可能に前のフィールド名を置き換えます。

私の提案は、uは、第1のコントローラまたはプロジェクト内およびuは、コードの展開の問題だ

関連する問題