【发布时间】:2016-02-06 13:28:27
【问题描述】:
是否可以使用 MongoDB java 驱动程序中的查询来获取文档中的字段数
例子:
Document1 :{_id:1,"type1": 10 "type2":30,"ABC":123,"DEF":345}
Document2 :{_id:2,"type2":30,"ABC":123,"DEF":345}
注意:在第二个文档中“type1”键不存在。
当我投影时
是否可以仅投影“type1”和“type2”并获取该文档中存在的字段数。
使用当前代码,我正在获取所有文档并单独搜索我正在寻找的键是否存在于整个光标中: 截取的代码如下:
MongoClient mcl=new MongoClient();
MongoDatabase mdb=mcl.getDatabase("test");
MongoCollection mcol=mdb.getCollection("testcol");
FindIterable<Document> findIterable = mcol.find();
MongoCursor<Document> cursor = findIterable.iterator();
//Here am having 120 types checking if each type is present..
while(cursor.hasNext())
{
Document doc=cursor.next();
int numberOfTypes=0;
for(int i=1;i<=120;i++)
{
if(doc.containsKey("type"+i))
{
numberOfTypes++;
}
}
System.out.println("*********************************************");
System.out.println("_id"+doc.get("_id"));
System.out.println("Number of Types in this document are "+numberOfTypes);
System.out.println("*********************************************");
}
}
如果记录较少,此代码将正常工作。假设每个 Document 包含 120 种类型有 5000000 个,应用程序正在崩溃,因为每次迭代都会涉及更多垃圾收集正在创建一个文档。有没有其他方法可以实现上述功能。
【问题讨论】:
标签: mongodb mongodb-query mongodb-java