我必须限制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/

10-10 17:58