mongo和java查找嵌套键和值

mongo和java查找嵌套键和值,java,mongodb,Java,Mongodb,我的mongo集合包含以下文档 { "_id" : ObjectId("52d43cd29b85346a4aa6fe17"), "windowsServer" : [ { "topProcess" : [ ] }] }, { "_id" : ObjectId("52d43cd29b85346a4aa6fe18"), "windowsServer" : [ { "topProcess" : [ {pid:1,n

我的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。任何人都知道我应该如何只获取第二个文档到进程中吗?

试试这个(并将其转换为java驱动程序):


在您的代码中,只有以下行中有错误

criteria.put("windowsServer.topProcess", new BasicDBObject("$ne", "[]"));
您尝试使用括号作为字符串来比较数组是否为空。可以对空数组使用BasicDBList()。更新上面的行与以下内容,它应该工作

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

这是正确的。在Java中,这转换为:
criteria.put(“windowsServer.topProcess”,新的BasicDBObject($not),新的BasicDBObject($size,0))
criteria.put("windowsServer.topProcess", new BasicDBObject("$ne", new BasicDBList()));