mongo和java查找嵌套键和值

时间:2014-01-21 05:44:36

标签: java mongodb

我的mongo馆藏包含以下文件

{
    "_id" : ObjectId("52d43cd29b85346a4aa6fe17"),
    "windowsServer" : [
    {
        "topProcess" : [ ]
    }]
},
{
    "_id" : ObjectId("52d43cd29b85346a4aa6fe18"),
    "windowsServer" : [
    {
        "topProcess" : [ {pid:1,name:"wininit"}]
    }]
 }

现在在我的java代码中我想在上面的例子中只使用topProcess我只想要第二个文件,其中topProcess有一些数据。为此,我编写了我的java代码,如下所示

BasicDBObject criteria = new BasicDBObject();
BasicDBObject projections = new BasicDBObject();
criteria.put("windowsServer.topProcess", new BasicDBObject("$ne", "[]"));
projections.put("windowsServer.topProcess",1);
DBCursor cur = coll.find(criteria,projections);
while(cur.hasNext() && !isStopped()) {
    String json = cur.next().toString(); 
}

当我执行上面的代码并打印json字符串时,它还包含两个topProcess。任何人都知道我应该如何才能获得第二个文件topProcess?

2 个答案:

答案 0 :(得分:2)

试试这个(并将其翻译成你的java驱动程序):

"windowsServer.topProcess": {$not: {$size: 0} }

答案 1 :(得分:0)

在您的代码中,您只会在以下行中出错。

criteria.put("windowsServer.topProcess", new BasicDBObject("$ne", "[]"));

您尝试使用括号作为String来比较数组是否为空。您可以将 BasicDBList()用于空数组。使用以下内容更新上面的行,它应该可以正常工作。

criteria.put("windowsServer.topProcess", new BasicDBObject("$ne", new BasicDBList()));