首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB -在java中实现nor查询

MongoDB -在java中实现nor查询
EN

Stack Overflow用户
提问于 2018-01-11 00:46:42
回答 2查看 507关注 0票数 2

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

Json:

代码语言:javascript
复制
     {
      "_id" : "Team:2334918",
      "fieldName" : [
                "Delivery",
                "Support"
            ],
      "isDeleted" : false
      }

下面是查询:

代码语言:javascript
复制
  db.myCollection.find({$nor: [{“fieldName”: {$exists: false}},{“fieldName”:{$size:0}}]})

我编写了以下代码来实现上述查询:

代码语言:javascript
复制
    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++;
         }

我在运行时遇到以下错误:

代码语言:javascript
复制
java.lang.ClassCastException: com.mongodb.FindIterableImpl cannot be cast to com.mongodb.client.MongoCursor
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-11 00:55:10

替换为:

代码语言:javascript
复制
MongoCursor<Document> curs = (MongoCursor<Document>) col.find(searchObject);

while (curs.hasNext()) {

}

有了这个:

代码语言:javascript
复制
FindIterable<Document> docs = col.find(searchObject);

for (Document d : docs) {

}

来自@Veeram的建议(在上面的评论中)也是正确的。

票数 1
EN

Stack Overflow用户

发布于 2018-01-11 01:02:52

试一试

获取游标的MongoCursor<Document> curs = col.find(searchObject).iterator();

你不需要抓住光标。您可以使用FindIterable中提供的方法来迭代游标。最后是一个例子。

此外,您还混合了Document (3.x)和BasicDBObject (2.x)。您可以将搜索构建器替换为

代码语言:javascript
复制
Filters searchObject = Filters.nor(Filters.exists("fieldName"), Filters.size("fieldName", 0);
FindIterable<Document> curs =  col.find(searchObject);
curs.forEach();

更多信息here由作者提供。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48192251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档