java - query - ¿Cómo puedo verificar si un campo existe o no en MongoDB?
query document mongodb (4)
La consulta no filtraría todos los elementos con el valor de texto que se muestra a continuación.
db.things.find({otherInfo:{$in: [text]}});
BasicDBObject query = new BasicDBObject();
query.put("otherInfo", new BasicDBObject("$in", "[text]"));
var result = db.find(query);
He creado algunos documentos y me las arreglé para hacer algunas consultas simples, pero no puedo crear una consulta que encuentre documentos donde solo existe un campo.
Por ejemplo, supongamos que este es un documento:
{ "profile_sidebar_border_color" : "D9B17E" ,
"name" : "???? ???????" , "default_profile" : false ,
"show_all_inline_media" : true , "otherInfo":["text":"sometext", "value":123]}
Ahora quiero una consulta que traiga todos los documentos donde el texto en otherInfo
tiene algo dentro.
si no hay texto, la otherInfo
será así: "otherInfo":[]
Así que quiero comprobar la existencia del campo de text
en otherInfo
.
¿Cómo puedo conseguir esto?
O puedes usar:
import static com.mongodb.client.model.Filters.exists;
Document doc = (Document) mongoCollection.find(exists("otherInfo")).first();
Puede utilizar el operador $exists
en combinación con el .
notación. La consulta desnuda en el shell mongo debería verse así:
db.yourcollection.find({ ''otherInfo.text'' : { ''$exists'' : true }})
Y un caso de prueba en Java podría verse así:
BasicDBObject dbo = new BasicDBObject();
dbo.put("name", "first");
collection.insert(dbo);
dbo.put("_id", null);
dbo.put("name", "second");
dbo.put("otherInfo", new BasicDBObject("text", "sometext"));
collection.insert(dbo);
DBObject query = new BasicDBObject("otherInfo.text", new BasicDBObject("$exists", true));
DBCursor result = collection.find(query);
System.out.println(result.size());
System.out.println(result.iterator().next());
Salida:
1
{ "_id" : { "$oid" : "4f809e72764d280cf6ee6099"} , "name" : "second" , "otherInfo" : { "text" : "sometext"}}
Puedes usar la clase com.mongodb.QueryBuilder para construir una consulta provista en la respuesta de Matt:
QueryBuilder queryBuilder = QueryBuilder.start("otherInfo.text").exists(true);
DBObject query = queryBuilder.get();
DBCursor dbCursor = collection.find(query);