私はmongodbに初心者です。重複するエントリを避ける方法を知っていてもいいですか?リレーショナル表では、主キーを使用してそれを回避します。 javaを使ってMongodbで指定する方法を知ってもいいですか?Mongodbは重複した記入を避ける
答えて
{unique:true}
オプションのインデックスを使用してください。
// everyone's username must be unique:
db.users.createIndex({email:1},{unique:true});
これを複数のフィールドにまたがって行うこともできます。 詳細と例については、this sectionを参照してください。
MongoDBのインデックスは、必要に応じて何の文書が、その値は、インデックス付きキーの既存の文書のものと一致して挿入されていないことを保証ユニークキー制約を課すことができます。
// everyone's username must be unique, //but there can be multiple users with no email field or a null email: db.users.createIndex({email:1},{unique:true, sparse:true});
:
null
値が一意のキーから無視されるために必要であれば
、その後、あなたはまた、sparse
オプションを追加することによって、また、まばらなインデックスを(がhereを参照)を確認する必要がありますMongoDB Java Driverを使用して索引を作成する場合。試してみてください:
Document keys = new Document("email", 1);
collection.createIndex(keys, new IndexOptions().unique(true));
私はJavaプログラマではありませんが、おそらくこれを変換することができます。
var doc = {'name': 'sam'};
db.users.insert(doc); // doc will get an _id assigned to it
db.users.insert(doc); // Will fail since it already exists
これはすぐに複製を停止します。デフォルトで
MongoDBは_id
あなたがそうのように二回書き込まれた文書を防ぐために、このキーにupsert()
またはsave()
を使用することができますとして知られている主キーを持っています。特定の条件下でのマルチスレッドセーフインサートについては、この場合、あなたの状態についてもっと知る必要があります。
ただし、_id
のインデックスはデフォルトでは一意ではありません。
テオンソリューションは私のために動作しませんでしたが、これがやった:この使用は推奨されているが
BasicDBObject query = new BasicDBObject(<fieldname>, 1);
collection.ensureIndex(query, <index_name>, true);
は、これは「_id」フィールドを使用して行うことができます。 名前が一意になるようにするには、「_id」列に名前を入れることができます。「_id」列が各エントリごとに一意であることがわかるかもしれません。 collection.Thisで「アミットは、」あなたが求めている方法のいずれかになりますよう
BasicDBObject bdbo = new BasicDBObject("_id","amit");
さて、他のエントリには、名前を持つことはできません。モンゴのV3.0 Javaドライバのよう
、インデックスを作成するためのコードは次のようになります。
public void createUniqueIndex() {
Document index = new Document("fieldName", 1);
MongoCollection<Document> collection = client.getDatabase("dbName").getCollection("CollectionName");
collection.createIndex(index, new IndexOptions().unique(true));
}
// And test to verify it works as expected
@Test
public void testIndex() {
MongoCollection<Document> collection = client.getDatabase("dbName").getCollection("CollectionName");
Document newDoc = new Document("fieldName", "duplicateValue");
collection.insertOne(newDoc);
// this will throw a MongoWriteException
try {
collection.insertOne(newDoc);
fail("Should have thrown a mongo write exception due to duplicate key");
} catch (MongoWriteException e) {
assertTrue(e.getMessage().contains("duplicate key"));
}
}
- 1. mongodbバルク挿入重複キーエラーを避ける
- 2. エンティティフレームワーク:重複の挿入を避ける
- 3. Hibernate、重複を避ける方法は?
- 4. C#mongodbフィールド名重複回避策
- 5. mySQLに重複行を挿入するのを避ける
- 6. 重複するコールバックを避ける
- 7. のPython/MySQLの重複挿入を避ける
- 8. Linqの保留中の挿入物の重複を避ける?
- 9. Cで重複イベントサブスクリプションを避ける
- 10. arangoDBで重複を避ける方法
- 11. Gephiでラベルの重複を避ける
- 12. factory_boyファクトリで重複を避ける
- 13. データベーステーブルに重複アドレスを避ける
- 14. PHPでIDの重複を避ける
- 15. iPhoneのアドレス帳:重複を避ける
- 16. LINQ - 避けるため、重複したエントリ
- 17. SQL(MariaDB)で重複したSELECT句を避ける方法
- 18. 避け引数の重複は(...)
- 19. Railsは重複を避けるためにhas_many
- 20. 重複したキーを避けるためにtxMongoを挿入する方法は?
- 21. SQLite3で重複データを避けるためにインデックスをカバー
- 22. コンテンツの重複を避けるためのSEOフレンドリーなURL
- 23. プルリクエストで重複したコミットを避けるためにrebaseする方法
- 24. Sass 3.2でプレースホルダーセレクターを使用して重複を避ける
- 25. MongoDBで$ pushを使用して配列を更新するときに重複する値を避ける
- 26. ELを使って重複を避ける方法は?
- 27. ここでPHPコードの重複を避けるには
- 28. SQL Server 2005で重複を避けるには?
- 29. Googleでアーカイブページのコンテンツの重複を避けるには?
- 30. Mysqlテーブルへの重複データを避けるには?
注: 'null'とnone existantも一意の値として扱われるので、削除されたユーザーのテーブルがあり、法律でデータを削除するが、将来の削除のために行を保持するユニークなインデックスの問題私はそれが本当に必要になると思う。 – Sammaye
@Sammaye:あなたはナル/不足している分野で問題を解決するために、[スパースインデックス](http://www.mongodb.org/display/DOCS/Indexes#Indexes-sparse%3Atrue)を使用することができます。 – Stennie
+1これは、ユニークなインデックスの最後の段落は、ここではドキュメントに記載されます。また、 – theon