我的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?
答案 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()));