如何限制Mongodb中的字段

时间:2014-09-12 14:36:54

标签: java mongodb

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

1 个答案:

答案 0 :(得分:1)

jira.mongodb.org

复制的答案
  

在特定字段上查询GridFS集合时,它在no时有效   GridFS文件曾存储在该集合中。保存文件后   对于集合,对特定字段的查询失败,并且“无法加载”   部分GridFSFile文件“。

     

...

     

现在我将重置与该集合相关联的对象,相当于一个   黑客但是:if(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);
...