ネストされたドキュメントに一意の制約を適用する必要があります。次に例を示します。
urlエンティティ: [ {「url」:「http://t.co/ujBNNRWb0y」、「display_url」:「bit.ly/11JyiVp」、「expanded_url」: "http://bit.ly/11JyiVp"} , {「url」:「http://t.co/DeL6RiP8KR」、「display_url」:「ow.ly/i/2HC9x」、 "expanded_url" : "http://ow.ly/i/2HC9x"} ]
url
、、display_url
およびexpaned_url
一意である必要があります。ensureIndex
MongoDB でこの条件のコマンドを発行する方法は?
また、このようなネストされたドキュメントを持つことは良い設計ですか、それとも別のコレクションに移動してここから参照する必要がありますurlEntities?
か?私はMongoDBが初めてなので、ベストプラクティスの提案は非常に役に立ちます.
完全なシナリオ:
何百万ものデータを持つデータベースに以下のようなドキュメントがあるとします:
{ "_id" : { "$oid" : "51f72afa3893686e0c406e19"} , "user" : "test" , "urlEntities" : [ { "url" : "http://t.co/64HBcYmn9g" , "display_url" : "ow.ly/nqlkP" , "expanded_url" : "http://ow.ly/nqlkP"}] , "カウント" : 0}
同様のオブジェクトを含む別のドキュメントを取得したらurlEntities
、ユーザー フィールドとカウント フィールドのみを更新する必要があります。まず、フィールドに一意の制約を適用しurlEntities
、例外を処理してから更新することを考えました。そうしないと、挿入する前に各エントリが存在するかどうかを確認すると、パフォーマンスに大きな影響を与えます。では、どうすれば一意性を強制できurlEntities
ますか? 私は試した
{"urlEntities.display_url":1,"urlEntities.expanded_url":1},{unique:true}
それでも、例外なく同じドキュメントを 2 回挿入できます。