Tôi có một câu hỏi liên quan đến MongoDB với dữ liệu mùa xuân. Tôi có các lớp miền này:MongoDB đối tượng nhúng không có ID (giá trị null)
@Document
public class Deal {
@Id
private ObjectId _id;
private Location location;
private User user;
private String description;
private String title;
private String price;
private boolean approved;
private Date expirationDate;
private Date publishedDate;
}
@Document
public class Location {
@Id
private ObjectId _id;
private Double latitude;
private Double longitude;
private String country;
private String street;
private String zip;
}
@Document
public class User {
@Id
private ObjectId _id;
private String email;
private String password;
private String profile_image_url;
private Collection<Deal> deals = new ArrayList<Deal>();
}
Với những miền này tôi có thể thành công CRUD. Chỉ có một vấn đề. Khi lưu User với Deals, các giao dịch và Location get _id được đặt thành null khi lưu chúng vào MongoDB. Tại sao không MongoDB tạo id duy nhất cho các đối tượng nhúng?
Kết quả sau khi tiết kiệm một tài khoản với một thỏa thuận:
{ "_id" : ObjectId("4fed0591d17011868cf9c982"),
"_class" : "User",
"email" : "[email protected]",
"password" : "mimi",
"deals" : [
{ "_id" : null,
"location" : { "_id" : null,
"latitude" : 2.22,
"longitude" : 3.23445,
"country" : "Denmark",
"street" : "Denmark road 77",
"zip" : "2933" },
"description" : "The new Nexus 7 Tablet. A 7 inch tablet from Google.",
"title" : "Nexus 7",
"price" : "1300",
"approved" : false,
"expirationDate" : Date(1343512800000),
"publishedDate" : Date(1340933521374) } ] }
Như bạn có thể nhìn thấy từ kết quả, Xử lý và vị trí ID được thiết lập để NULL.
ID xác định tài liệu gốc, không phải tài liệu phụ. Không có lý do tại sao bạn muốn tự động tạo một id cho một tài liệu lồng nhau vì MongoDB chỉ có thể lấy các tài liệu cấp cao nhất. Những gì bạn thực sự cần id lồng nhau cho? –
Tôi chỉ cần tìm kiếm giao dịch chứ không phải là Người dùng. Bây giờ tôi phải tìm kiếm từ người dùng và sau đó vòng lặp đã ném mọi thỏa thuận trong người dùng lập trình. – Millad
Id không liên quan gì đến những gì bạn có thể tìm kiếm. Thật tuyệt khi tìm kiếm '{'deals.price': {$ gt: 1000}}'. Tuy nhiên, truy vấn này sẽ trả về một đối tượng 'User' mà bạn phải tự tay rút ra' Deal' từ đó. Đây là giới hạn MongoDB, không có gì ngụ ý bởi Dữ liệu Mùa xuân. –