Tengo una pregunta sobre MongoDB con Spring Data. tengo estas clases de dominio:MongoDB Embedded Objects no tiene ID (valor nulo)
@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>();
}
Con estos dominios que puedo con éxito CRUD. Solo hay un problema. Al guardar un Usuario con Ofertas, las ofertas y la Ubicación obtienen _id establecido en nulo al guardarlos en MongoDB. ¿Por qué no puede MongoDB generar identificaciones únicas para objetos incrustados?
El resultado después de guardar un usuario con un trato:
{ "_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) } ] }
Como se puede ver en el resultado, Deal y el ID de ubicación se establece en NULL.
Una ID identifica un documento raíz, no documentos secundarios. No hay ninguna razón por la que desee generar automáticamente una identificación para un documento anidado, ya que MongoDB solo puede recuperar documentos de primer nivel. ¿Para qué necesitas realmente la identificación anidada? –
Necesito buscar solo ofertas y no Usuario. Ahora tengo que buscar desde el usuario y luego el bucle lanzó cada trato en el usuario mediante programación. – Millad
La identificación no tiene nada que ver con lo que puede buscar. Está perfectamente bien buscar '{'deals.price': {$ gt: 1000}}'. Aún así, esta consulta devolvería un objeto 'Usuario' que manualmente tendría que sacar el' Deal' de entonces. Esta es una limitación de MongoDB, nada implícito en Spring Data. –