2011-03-14 12 views
29

Estoy intentando mongo db y quiero preguntar si es posible obtener solo una parte específica del documento?Mongodb obtener una parte específica del documento

Ejemplo

{ 
    "name" : "MongoDB", 
    "info" : { 
       x : 203, 
       y : 102 
      } 
} 

Y quiero sólo el contenido de info.

Lo más cercano que encontré es db.cellection.find({},{info:1 }) pero esto me devuelve información: contenido y quiero devolver solo contenido.

¿Es posible? ¿Cómo?

+0

También estoy interesado en la solución como mis documentos son + 5 MB de tamaño y yo después de sólo campos específicos. No, no puedo guardar los campos específicos en una tabla separada ya que almaceno múltiples campos en un documento (+ 10k campos) –

Respuesta

26

Usted podría hacer

db.collection.find({},{'info.x':1, 'info.y':1}) 

pero eso significa listado de todos y cada elemento del objeto de información en la proyección - que puede o no ser lo que estás buscando.

11

No, no puede devolver solo los valores para x/y; incluso si limita los campos, la estructura externa aún se devuelve.

Consulte para obtener más información.

13

Puede utilizar distinct() función que se asemeja al siguiente:

db.collection.distinct("info", {info : {$exists : true}}) 
+2

¿Tiene alguna idea de por qué esto estaba en 0? Suena como la respuesta correcta, mientras que los 2 primeros implican que lo que el póster quiere hacer es imposible. – michaelAdam

+0

A pesar de que tiene una palabra clave "distinta", no está seleccionando elementos distintos como lo hace mysql, selecciona solo ese campo "distinto" que usted proporciona. Entonces esta respuesta produce realmente mejores resultados que otras 2 respuestas. – WallTearer

1

MongoDb docs

leyeron este

en esto, Si especifica ninguna proyección, el método find() devuelve todos los campos de la todos los documentos que coinciden con la consulta.

0

Puede utilizar aggregation framework:

  1. fase $ partido (opcional) para filtrar resultado.
  2. fase de proyecto $ para seleccionar campos

    db.getCollection('yourCollection').aggregate([ {$match:{_id:ObjectId("566fc97f5b79dff1a73ca2ae")}}, {$project:{_id:0, "x":"$info.x", "y":"$info.y"}} ])

Cuestiones relacionadas