2017-08-10 9 views
0

私はMongodbではユニークなフィールドを維持するように努めていますが、それは不可能です。問題固有のフィールドの場合?

ここに私のコード:

var RepositorySchema = new mongoose.Schema({ 
     folderName: { type: String, unique: true}, 
     tag: String , 
     ismainFolder: { type: Boolean }, 
     innerFiles: [{ filename: String, isFolder: { type: Boolean }, parentfolderId: { type: Schema.ObjectId, ref: 'repository' }, filelocation: { type: String } }], 
     innerFolder: [{ foldername: String, ismainFolder: { type: Boolean }, parentfolderId: { type: Schema.ObjectId, ref: 'repository' } }], 
    }); 

module.exports = mongoose.model('repository', RepositorySchema); 

フォルダ名が一意の値を維持していない、私を助けてください

+0

データベースから取得した、同じ 'folderName'値を持つレコードをいくつか追加できますか? – robertklep

+2

コレクションには既にデータがありますか?実際にはすべて「ユニーク」ではない可能性があり、その理由でインデックスの作成が失敗する可能性があります。 'mongoose.set( 'debug'、true)'でデバッグをオンにして、アプリケーションの起動時にどのログを見るかを確認します。インデックスを作成しようとすると、エラーが発生するはずです。 –

答えて

0

は、あなたのコレクションのすべてのインデックスを再作成してください。ターミナルで次のコマンドを実行します。

> mongo 
> use <your_dv> 
> db.repository.reIndex() 

REINDEXコマンドは、コレクションのすべてのインデックスをドロップし、それらを再作成します。この操作は、大量のデータおよび/または多数の索引を持つコレクションでは高価になる可能性があります。

+0

重複が既に存在する場合は、これが原因である可能性があります。 –

+0

@ NeeLunnはい、問題になる可能性がありますが、重複していない場合でも、mongooseは既存のコレクションにユニークなインデックスを適用しないことがあります。インデックスのレクリエーションが役立ちます。 – alexmac

+0

私の視点から見れば、同じことが何百回も繰り返されるのを見ることに基づいています。 99%これらのケースのうち、複製が原因で作成が失敗したため、インデックスが存在しません。とにかく、Mongooseはアプリケーションの起動時にデフォルトで「再インデックス化」します。だから、あなたは実際にここに利益の何かを言っていません。今理解していますか? –

関連する問題