Tôi là người mới đến mongodb. Tôi có thể biết cách tránh các mục trùng lặp không. Trong các bảng quan hệ, chúng ta sử dụng khóa chính để tránh nó. Tôi có thể biết làm thế nào để xác định nó trong Mongodb bằng cách sử dụng java?Mongodb tránh các mục trùng lặp
Trả lời
Sử dụng chỉ mục có tùy chọn {unique:true}
.
// everyone's username must be unique:
db.users.createIndex({email:1},{unique:true});
Bạn cũng có thể thực hiện việc này trên nhiều trường. Xem this section trong tài liệu để biết thêm chi tiết và ví dụ.
chỉ số MongoDB có thể tùy chọn áp đặt một độc đáo quan trọng hạn chế, mà đảm bảo rằng không có tài liệu được chèn vào các giá trị mà cho các phím được lập chỉ mục phù hợp với các tài liệu hiện có.
Nếu bạn muốn cho null
giá trị để được bỏ qua từ khóa duy nhất, sau đó bạn có cũng làm cho chỉ mục thưa thớt (thấy here), bởi cũng thêm sparse
tùy chọn:
// 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});
Nếu bạn muốn tạo chỉ mục bằng Trình điều khiển Java MongoDB. Hãy thử:
Document keys = new Document("email", 1);
collection.createIndex(keys, new IndexOptions().unique(true));
Tôi không phải là lập trình viên Java, tuy nhiên bạn có thể chuyển đổi điều này.
MongoDB theo mặc định không có một khóa chính được gọi là _id
bạn có thể sử dụng upsert()
hoặc save()
trên phím này để ngăn chặn các tài liệu không được viết bằng hai lần như vậy:
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
này sẽ ngừng ngay lập tức trùng lặp. Như để chèn đa luồng an toàn trong điều kiện nhất định: tốt, chúng tôi sẽ cần phải biết thêm về tình trạng của bạn trong trường hợp đó.
Tôi nên thêm tuy nhiên chỉ số _id
là không theo mặc định.
giải pháp Theon không làm việc cho tôi, nhưng điều này đã làm:
BasicDBObject query = new BasicDBObject(<fieldname>, 1);
collection.ensureIndex(query, <index_name>, true);
Điều này có thể được thực hiện bằng trường "_id", mặc dù sử dụng này không được khuyến khích. giả sử bạn muốn tên là duy nhất, sau đó bạn có thể đặt tên trong cột "_id" và bạn có thể biết cột "_id" là duy nhất cho mỗi mục nhập.
BasicDBObject bdbo = new BasicDBObject("_id","amit");
Bây giờ, không có mục nhập khác có thể có tên là "amit" trong collection.This có thể là một trong những cách mà bạn đang yêu cầu.
Tính đến tài xế Java v3.0 Mongo của, mã để tạo ra các chỉ số trông giống như:
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. Tránh các mục trùng lặp trên mảng Mongoose
- 2. luận Tránh trùng lặp qua (...)
- 3. Tránh mã trùng lặp (PHP)
- 4. mô hình Django tránh trùng lặp
- 5. Tránh các thư trùng lặp trên JMS/ActiveMQ
- 6. Tránh trùng lặp khi các điểm gây nhiễu
- 7. Tránh các mục trùng lặp khi nhập dữ liệu với Magical Record
- 8. Các cuộc gọi addEventListener trùng lặp có tạo các mục nghe người nghe trùng lặp không?
- 9. Làm cách nào để tránh tiêu đề trùng lặp nội dung trùng lặp với MVC3 FileContentResult?
- 10. Khuôn khổ thực thể: Tránh chèn trùng lặp
- 11. Tránh nội dung trùng lặp cho trang phản hồi
- 12. Tránh trình trùng lặp của trang Struts 2 jsp
- 13. Tránh đăng ký sự kiện trùng lặp trong C#
- 14. Lớp trừu tượng, cách tránh trùng lặp mã?
- 15. MongoDB: chèn vào cập nhật khóa trùng lặp
- 16. Tránh trùng lặp mã trong một mẫu chuyên
- 17. Java: Tránh chèn trùng lặp trong mảng danh sách
- 18. S3: Các nhóm trùng lặp
- 19. Highcharts nhãn danh mục trùng lặp
- 20. Mục nhật ký trùng lặp log4j
- 21. Xóa các mục nhập trùng lặp liên tiếp
- 22. chèn bỏ qua các mục trùng lặp trong Doctrine2/Symfony2
- 23. Tìm các mục trùng lặp trong Bộ sưu tập
- 24. kiểm tra các mục trùng lặp trong arraylist
- 25. Python: Xóa các mục nhập CSV trùng lặp
- 26. Xóa các mục trùng lặp khỏi LEFT OUTER JOIN
- 27. Ngăn các mục trùng lặp được thêm vào ListBox
- 28. cây git chứa các mục nhập tệp trùng lặp
- 29. Mục nhập trùng lặp trong ListView
- 30. UITableView Mục Footer trùng lặp khi cuộn
Lưu ý: 'null' và không tồn tại nào cũng được tính là giá trị duy nhất, vì vậy nếu bạn có bảng người dùng bị xóa và theo luật, bạn xóa dữ liệu của họ nhưng giữ hàng của họ để xóa trong tương lai bạn sẽ có vấn đề với các chỉ mục duy nhất. Tôi đoán nó thực sự cần. – Sammaye
@Sammaye: Bạn có thể sử dụng [chỉ mục thưa thớt] (http://www.mongodb.org/display/DOCS/Indexes#Indexes-sparse%3Atrue) để giải quyết vấn đề với các trường trống/thiếu. – Stennie
+1 Nó được đề cập trong tài liệu ở đây, đoạn cuối cho các chỉ mục duy nhất: http://docs.mongodb.org/manual/core/indexes/#unique-index – theon