MongoDB - 在 java 中实现 nor 查询
MongoDB - Implementing nor query in java
我试图在 Java 中实现以下查询(我使用的是 3.4.2 mongo-java 驱动程序):
Json:
{
"_id" : "Team:2334918",
"fieldName" : [
"Delivery",
"Support"
],
"isDeleted" : false
}
此处查询:
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++;
}
我在 运行 时收到以下错误:
java.lang.ClassCastException: com.mongodb.FindIterableImpl cannot be cast to com.mongodb.client.MongoCursor
替换为:
MongoCursor<Document> curs = (MongoCursor<Document>) col.find(searchObject);
while (curs.hasNext()) {
}
有了这个:
FindIterable<Document> docs = col.find(searchObject);
for (Document d : docs) {
}
@Veeram 的建议(在上面的评论中)也是正确的。
尝试
MongoCursor<Document> curs = col.find(searchObject).iterator();
获取光标。
您不必抓住光标。您可以使用 FindIterable
中提供的方法为您迭代游标。示例在最后。
你也在混合 Document
(3.x) 和 BasicDBObject
(2.x)。您可以将搜索构建器替换为
Filters searchObject = Filters.nor(Filters.exists("fieldName"), Filters.size("fieldName", 0);
FindIterable<Document> curs = col.find(searchObject);
curs.forEach();
作者提供的更多信息 。
我试图在 Java 中实现以下查询(我使用的是 3.4.2 mongo-java 驱动程序):
Json:
{
"_id" : "Team:2334918",
"fieldName" : [
"Delivery",
"Support"
],
"isDeleted" : false
}
此处查询:
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++;
}
我在 运行 时收到以下错误:
java.lang.ClassCastException: com.mongodb.FindIterableImpl cannot be cast to com.mongodb.client.MongoCursor
替换为:
MongoCursor<Document> curs = (MongoCursor<Document>) col.find(searchObject);
while (curs.hasNext()) {
}
有了这个:
FindIterable<Document> docs = col.find(searchObject);
for (Document d : docs) {
}
@Veeram 的建议(在上面的评论中)也是正确的。
尝试
MongoCursor<Document> curs = col.find(searchObject).iterator();
获取光标。
您不必抓住光标。您可以使用 FindIterable
中提供的方法为您迭代游标。示例在最后。
你也在混合 Document
(3.x) 和 BasicDBObject
(2.x)。您可以将搜索构建器替换为
Filters searchObject = Filters.nor(Filters.exists("fieldName"), Filters.size("fieldName", 0);
FindIterable<Document> curs = col.find(searchObject);
curs.forEach();
作者提供的更多信息