2017-10-16 75 views
1

我想从mongo子文档中找到特定的字段值,但是它检索全数据或空值。我正在使用mongo 3.0.1驱动程序。 mongo特定驱动程序的语法有没有问题?
JSON数据是:如何从mongo中的子文档获取特定值

{ 
     "Demo": { 
      "Demo Data": { 
       "Building": { 
        "A": 1, 
        "B": 2, 
        "C": 3, 
        "D": 4, 

       }, 
       "Mode": "Building" 
      } 
     } 
    } 

的代码如下:

DBCollection collection = db.getCollection("demo"); 
        BasicDBObject field = new BasicDBObject(); 
        BasicDBObject document = new BasicDBObject(); 
        field1.put("_id", 0); 
        field1.put("Demo", 1); 
        DBCursor cursor = collection.find(document, field); 
        BasicDBObject object = new BasicDBObject(); 
        BasicDBObject Mode = new BasicDBObject(); 
        while (cursor.hasNext()) { 
         object = (BasicDBObject) cursor.next(); 
         Mode.put("Mode", object.get(Mode)); 
         System.out.println("Mode value is"+Mode); 

        } 

,但使用上面的代码中,输出作为表示:

Mode value is {"Mode":null} 

要求是获得下面的输出: {"Mode": "Building"}

请指明条件出错的地方。谢谢你的帮助。

+0

正在使用哪个版本的Mongo Java驱动程序? –

+0

@ CS_noob:我正在使用版本mongo-3.0.1 java驱动 –

回答

0

我认为你错误地认为,因为你已经把field1.put("Demo", 1);,它会返回你内在的文件,而不管它会一直返回你完整的文件,它会做的是省略其他领域,但即使这样,它会是完整的文档,从根本上是正确的。

while (cursor.hasNext()) { 
    object = (BasicDBObject) cursor.next(); 
    Map map = object.toMap(); 
    Mode.put("Mode", map.get("Demo").get("Demo Data").get("Mode")); //pre-check for NPE 
    System.out.println("Mode value is"+Mode); 
} 
+0

好的谢谢,但我想知道是否有任何方法在mongo中搜索特定的子文档在一个调用/方法没有嵌套get方法? –

+0

mongo驱动程序将总是返回完整的文档,如果你的意思是在不改变它的地图的情况下得到它,我认为你将不得不尝试一些命中和试验也许object.get(“Demo.Demo Data.Mode”),但是我怀疑它,因为这是特定于驾驶员执行。 –

相关问题