我必须限制processtemplate类中存在的某些字段。以下是我开发的方法。当我传递一些ID时,它给了我运行时异常。请帮帮我
public ProcessTemplate get(String id) throws GRIDRecordsDataManagerException {
ProcessTemplate entity = null;
try {
BasicDBObject qry = new BasicDBObject();
Map<String, Object> whereMap = new HashMap<String, Object>();
whereMap.put("id", id);
qry.putAll(whereMap);
BasicDBObject field = new BasicDBObject();
field.put("name", 1);
field.put("status", 1);
field.put("description", 1);
DBCursor results = dbCollection.find(qry, field);
if (results != null && results.hasNext()) {
DBObject dbObj = results.next();
entity = new ProcessTemplate();
entity.setId((String) dbObj.get("id"));
entity.setProcessName((String) dbObj.get("name"));
entity.setStatus((String) dbObj.get("status"));
entity.setDescription((String) dbObj.get("description"));
System.out.println(entity);
}
} catch (Exception e) {
}
return entity;
}
最佳答案
从jira.mongodb.org复制的答案
在特定字段上查询GridFS集合时,如果没有
GridFS文件曾经存储在该集合中。保存文件后
到集合,对特定字段的查询失败,并显示“无法加载
部分GridFSFile文件”。
...
现在,我将重置与集合关联的对象,
骇客:如果(Objects.equal(GridFSDBFile.class,
coll.getObjectClass())){coll.setObjectClass(null); }
...
嗨,集合可以有一个关联的ObjectClass和
信息被缓存,允许设置一次然后重用
您代码中的其他位置。设置好之后,您必须明确取消设置
它。 GridFS是用于存储和检索文件的规范,该规范是
建立在驾驶员身上。 GridFS对如何做到这一点持保留意见
使用,因此它会在以下情况下设置文件集合的ObjectClass
您创建一个GridFS实例。它引发错误的原因是
GridFSFile不应以您显示的方式使用
可能代表文件的一部分,这就是为什么它会抛出
“无法加载部分GridFSFile文件”运行时错误。如你所愿
发现关联的ObjectClass只能通过重置
ObjectClass返回null。
在您的情况下,它被翻译为:
BasicDBObject qry = new BasicDBObject("id",id); //You can save 3 lines of code here, btw
BasicDBObject field = new BasicDBObject();
...
if (Objects.equal(GridFSDBFile.class, dbCollection.getObjectClass()))
dbCollection.setObjectClass(null);
DBCursor results = dbCollection.find(qry, field);
...
关于java - 如何限制Mongodb中的字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25810797/