私はそうのようなオブジェクト構造を持つコレクションを持っている:ユニークpartialFilterExpression指数は
{
emails: [{email:"[email protected]", type: "work"}],
_companyId: "FLEHFHOIEFHOIHEFHL"
}
は、私がemails
と_companyId
の組み合わせがユニークになるように、一意のインデックスを作成します。私は単純な複合インデックスを作成するだけですが、電子メールなしで2人を保存すると、emails.email
フィールドの値がインデックスされず、インデックスに_companyId
のままで、重複キーがスローされるため、2番目のフィールドにエラーがスローされます電子メールなしで2番目の文字を挿入しようとするとエラーが発生します。電子メールがある場合にのみフィールドのインデックスを作成します。だから私はpartialFilterExpression
の機能を見つけました。残念ながら、これは動作していません!それはどんなエラーも投げませんが、それはうまく重複を許します!
People.ensureIndex({ 'emails.email': 1, _companyId: 1 }, {
unique: 1,
partialFilterExpression: {
"emails": { "email": { $and: [{ $exists: true, $ne: "" }] } }
},
collation: { locale: "en", strength: 2 }
});
は、だから私はこれにそれを変更:
People._ensureIndex({ 'emails.email': 1, _companyId: 1 }, {
unique: 1,
partialFilterExpression: {
"emails.email": { $and: [{ $exists: true, $ne: "" }] }
},
collation: { locale: "en", strength: 2 }
});
そして、それはすべて言ってでインデックスを作成しません。
Error: key emails.email must not contain '.'
は何を行う方法がありますIやろうとしているのですか、それとも失われた原因ですか?
[OK]を