2017-12-04 16 views
1

udidsという配列フィールドがMeteor.usersスキーマにあります。これには一意の要素が含まれている必要があります。しかし、重複するキーエラーdupキーがあります:{:undefined}

new SimpleSchema({ 
    ... 
    udids: { 
    type: Array, 
    index: true, 
    unique: true, 
    optional: true, 
    sparse: true, 
    }, 
    'udids.$': { 
    type: String, 
    }, 
    ... 
}) 

私はアプリを起動したとき、私はこのエラーを得た:E11000 duplicate key error collection: meteor.users index: c2_udids dup key: { : undefined }これは私がSimpleSchemaCollection2を使用して索引を定義した方法です。
データベースのudids = undefinedの文書を検索しようとしましたが、db.users.find({ udids: { $type: 6 } })$type: 6の場合はundefinedの値)が返されますが、何も返されません。

+1

[プロファイラを有効にする](https://docs.mongodb.com/manual/reference/method/db.setProfilingLevel/)は、競合の原因となる正確なクエリを確認してください。エラーメッセージが正確でない可能性があります。 –

+0

あなたのスキーマによると、udidsは文字列の配列です。これは正しいです?そして、配列自体ではなく、個々のudids文字列をユニークにする必要がありますか? – blueren

+0

@bluerenこれは私が欲しいものです: 'user1.udids = ['a'、 'b']'と 'user2.udids = ['b']'のような2人のユーザーがいれば、これは無効です2人のユーザーのウードイドは同じ 'b'要素を持っているためです。 – sonlexqt

答えて

0

エラーメッセージが少し不明であるので、私は理由を推測しなければなりませんでした。現在のデータベースには既にudids = []のユーザーがいます。これらのユーザーからこのフィールドを設定解除するための移行スクリプトを作成しています。うまくいけば、これは私と同じ問題を抱えている人を助けるでしょう。

0

これはテストしていませんが、理想的には動作するはずです。

  1. Meteor.usersをコレクション名として使用しました。検証を実行したいコレクションに置き換えることができます。
  2. カスタム関数を使用して、udidsでフィールドの値を含む少なくとも1つのドキュメントを検索しました。
  3. クライアント側のコレクションにアクセスできない場合は、カスタム関数を編集してasynchronouslyを処理することができます。

new SimpleSchema({ 
      ... 
      'udids': { 
       optional: true, 
       type: [String], // an array of string eg. ['A','B'] 
       custom: function() { 

        // this.value = current field's value 
        // Below mongo query will check to see if there is at least one 
        // mongo doc whose udids contains the currently entered field's value. 
        // if found, then return the error message. 

        if (Meteor.users.findOne({ 
          udids: { 
           $in: [this.value] 
          } 
         })) { 
         return "duplicateMsg"; 
        } 
       }, 
       ... 
    }); 

SimpleSchema.messages({ duplicateMsg:"Udid already exists"}); 
+0

答えてくれてありがとうございますが、これは私が求めているものではないと思います...私はまだ "dup key:{:undefined}"の原因を知りません – sonlexqt

関連する問題