2017-12-19 23 views
0

アカウントを処理するサービスには、新しいアカウントを追加するためのルートがあります。明らかに、アカウントの電子メールフィールドは一意でなければなりません。 マッチが設立されたときにいつでもアプリがエラーをスローするようにします。mongoDBでユニークなインデックスを作成する方法は?

この時点で、それは手動機能によって実現されている:私はマングースを使用する場合は一意のインデックスを追加することに問題は

const { createError } = require('micro') 

const createAccount = async (collection, credentials) => { 
    const { email } = credentials 
    const account = await collection.findOne({ email }) 
    if (account) { 
    throw createError(401, 'this email is already used') 
    } 
    collection.insertOne({ email }) 
} 

module.exports = createAccount 

ありませんでした。今回は、mongoDBのネイティブドライバが使用されました。 よるドキュメントは、私のような何かを追加しようとしました:

collection.createIndex({ email: 1 }, { unique: true }) 

そして実際に、それは本当に、私は私のMLABホームでそれを見ることができ、インデックスを作成しました: https://gyazo.com/8f0e36a3134154acde0b77cf2ade61a6

は、たぶん私は時代遅れの構文を使用したり、このようなもの?なぜキーはユニークにfalseに設定されていますか?

+0

既存のインデックスをmongoから削除し、コードを再実行してください。 – VtoCorleone

+0

@VtoCorleoneが正しいです。そのインデックスはすでに存在していた可能性があります。それを削除してから再作成する必要があるかもしれません。 –

+0

イェップ、私はそれを試みた。どのような場合でも、インデックスには一意のfalseが設定されています。 オプションに問題があるようです: collection.createIndex({email:1}、{unique:true}) インデックスが作成されているが一意ではないためです。 –

答えて

0

あなたがいない場合は、すでにそこにインデックスを作成しますensureIndex

collection.ensureIndex(option, response){ 
// here call you fucntion 
} 

ensureIndexメソッドを使用しています。

+1

ensureIndexは推奨されていません:https://docs.mongodb.com/manual/reference/method/db.collection.ensureIndex/ –

+0

@SelloMkantjwa情報の更新ありがとう –

関連する問題