MongoDB—在java中实现nor查询

MongoDB—在java中实现nor查询,java,mongodb,mongo-java,mongo-java-driver,Java,Mongodb,Mongo Java,Mongo Java Driver,我尝试用Java实现以下查询(我使用的是3.4.2 mongo Java驱动程序): Json: 以下是查询: db.myCollection.find({$nor: [{“fieldName”: {$exists: false}},{“fieldName”:{$size:0}}]}) 我编写了以下代码来实现上述查询: MongoClient mc = ctm.getMongoConn(); db = ctm.getDatabase(mc); col = db.

我尝试用Java实现以下查询(我使用的是3.4.2 mongo Java驱动程序):

Json:

以下是查询:

  db.myCollection.find({$nor: [{“fieldName”: {$exists: false}},{“fieldName”:{$size:0}}]})
我编写了以下代码来实现上述查询:

    MongoClient mc = ctm.getMongoConn();
     db = ctm.getDatabase(mc);
     col = db.getCollection(collectionName);

    BasicDBObject searchObject = new BasicDBObject();
    List<BasicDBObject> searchArguments = new ArrayList<BasicDBObject>();

    searchArguments.add(new BasicDBObject("fieldName",new BasicDBObject("$exists",false)));
    searchArguments.add(new BasicDBObject("fieldName",new BasicDBObject("$size",0)));
    searchObject.put("$nor", searchArguments);

    MongoCursor<Document> curs = (MongoCursor<Document>) col.find(searchObject);

    while (curs.hasNext()){

             Document doc = curs.next();
             Object name1 = doc.get("fieldName");

             System.out.println(name1.toString());
             j++;
         }
替换此项:

MongoCursor<Document> curs = (MongoCursor<Document>) col.find(searchObject);

while (curs.hasNext()) {

}
MongoCursor curs=(MongoCursor)col.find(searchObject);
while(curs.hasNext()){
}
为此:

FindIterable<Document> docs = col.find(searchObject);

for (Document d : docs) {

}
FindIterable docs=col.find(searchObject);
用于(文档d:文档){
}
@Veeram(在上面的评论中)的建议也是正确的。

试试看

MongoCursor curs=col.find(searchObject.iterator()以获取光标

你不必抓住光标。您可以使用
FindIterable
中提供的方法为您迭代光标。最后举例说明

您还混合了
文档
(3.x)和
基本对象
(2.x)。您可以将搜索生成器替换为

Filters searchObject = Filters.nor(Filters.exists("fieldName"), Filters.size("fieldName", 0);
FindIterable<Document> curs =  col.find(searchObject);
curs.forEach();
Filters searchObject=Filters.nor(Filters.exists(“fieldName”)、Filters.size(“fieldName”,0);
FindTable curs=col.find(searchObject);
curs.forEach();

作者提供的更多信息。

尝试
MongoCursor curs=col.find(searchObject).iterator();
您还混合了文档(3.x)和BasicDBObject(2.x)。您可以用
Filters=Filters.nor(Filters.exists(“fieldName”)、Filters.size(“fieldName”,0);
谢谢@Veeram,这很有效
FindIterable<Document> docs = col.find(searchObject);

for (Document d : docs) {

}
Filters searchObject = Filters.nor(Filters.exists("fieldName"), Filters.size("fieldName", 0);
FindIterable<Document> curs =  col.find(searchObject);
curs.forEach();