remove query once node multiple how from example create collection array java mongodb

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);