java - MongoDB Java 驱动程序 - 在查找查询中使用存在投影

标签 java mongodb bson mongo-java

我想获取所有不存在field download的文档

find{ "download" : {$exists: false}}

对于 Java,我找到了一个示例:

  BasicDBObject neQuery = new BasicDBObject();
  neQuery.put("number", new BasicDBObject("$ne", 4));
  DBCursor cursor = collection.find(neQuery);

  while(cursor.hasNext()) {
    System.out.println(cursor.next());
  }

我的改编是

      BasicDBObject field = new BasicDBObject();
      field.put("entities.media", 1);
  field.put("download", new BasicDBObject("$exists",false));
  System.out.println("Start Find");
  DBCursor  cursor = collection.find(query,field);      
      System.out.println("End Find Start Loop ALL 100k");
   int i = 1;
                while(cursor.hasNext())

Exists 行不工作:

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: com.mongodb.MongoException: Unsupported projection option: $exists
        at com.mongodb.MongoException.parse(MongoException.java:82)
        at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:314)
        at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:295)
        at com.mongodb.DBCursor._check(DBCursor.java:368)
        at com.mongodb.DBCursor._hasNext(DBCursor.java:459)
        at com.mongodb.DBCursor.hasNext(DBCursor.java:484)
        at ImgToDisk.main(ImgToDisk.java:61)
        ... 5 more

现在不知道哪个是正确的适应,因为我的查询在 shell 和 UMongo 中工作,转移到 java 似乎不太容易看到。

最佳答案

你用

collection.find(query,field);

作为 find 方法的第二个参数的 DBObject 用于指示要返回结果文档的哪些属性。它有助于减少网络负载。

在您的示例中,您尝试将 $exists 子句放入 field DBObject。那行不通的。 第二个参数对象的属性值只能为1(包含该属性)或0(不包含)。

将其放入第一个名为 query 的 DBObject 中。

另见 herehere

关于java - MongoDB Java 驱动程序 - 在查找查询中使用存在投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15902287/

相关文章:

java - 从 ListableBeanFactory 获取类型和泛型的 bean

java - 在 Java 中使用包装器作为适配器的正确设计模式是什么

mongodb - Mongo-go-driver error New client error ClientOptions in argument to mongo.NewClient 错误

javascript - 如何使用 Mongoose 获取当前项的下一项和上一项

mongodb - 何时在 mongodb 中使用 BSON?

Java Bson 库无法映射文档对象

java - Java中的一个静态调用问题

java - 如何减少 3 个 Swing 复选框之间的空间?

mongodb - 在 Spring 数据的 RepositoryRestResource 中急切加载 MongoDB @DBRef

mongodb - Golang BSON 转换