我在mongodb中有一个查询,并且引用键位于hashmap列表中,我需要在mongodb中使用java处理一个简单的查询

时间:2013-08-30 13:33:57

标签: java mongodb

mongodb查询是 db.test.find({“col1”:{“$ ne”:“”}})。count(),我已经尝试了很多来源找到解决方案,必须从列表数组填充“col1”,请帮帮我 我已粘贴了部分代码

`

List<String> likey = new ArrayList<String>();

for (DBObject o : out.results())
{
likey.add(o.get("_id").toString()); 
}

Iterator<String>itkey = likey.iterator();

DBCursor cursor ;

//cursor = table.find();

HashMap<String, String> hashmap = new HashMap<String, String>();

while (itkey.hasNext())
{
System.out.println((String)itkey.next());

String keys = itkey.next().toString();

//System.out.println("keys --> "+keys);

String nullvalue = "";

Boolean listone = table.distinct(keys).contains(nullvalue);


hashmap.put(keys, listone.toString());

//System.out.println("distinct --> "+keys+" "+listone);

//System.out.println("proper str --- >"+ '"'+keys+'"'); 
}

Iterator<String> keyIterator = hashmap.keySet().iterator();
Iterator<String> valueIterator = hashmap.values().iterator();

while (keyIterator.hasNext()) {
//System.out.println("key: " + keyIterator.next());


while (valueIterator.hasNext()) {
//System.out.println("value: " + valueIterator.next());

//System.out.println("Key: " + keyIterator.next() +""+"value: "+valueIterator.next());

String hashkey = valueIterator.next();

}

}

`

1 个答案:

答案 0 :(得分:0)

当您发布代码时,如果您缩进代码会有所帮助,因此它更具可读性。正如我在另一个论坛上提到的,您需要返回并查看Java集合类,因为您在上面的代码中有多个使用错误。

以下是清理代码所需执行的一些操作:

1)您不需要使用itkey迭代器。相反,使用:

for (String key : likey) 

并摆脱所有itkey.next调用。您当前的代码仅处理List的每个第二个元素。其他的打印出来。

2)您的HashMap会将键映射到布尔值。那是你要的吗?您说您想要计算密钥的非零值的数量。这一行:

Boolean listone = table.distinct(keys).contains(nullvalue);

几乎肯定是错误的。

3)当您遍历HashMap时,您不需要valueIterator。相反,获取密钥(来自keyIterator,或使用上面更简单的迭代器语法定义的变量),然后使用密钥使用hashmap.get(key)获取匹配值。

这不会使你的代码工作,但它会稍微清理一下 - 目前很难理解你打算做什么。