如何在MongoDB中使用GridFSInputFile和GridFS而不添加文件并使用Java?

如何在MongoDB中使用GridFSInputFile和GridFS而不添加文件并使用Java?,java,mongodb,file,gridfs,Java,Mongodb,File,Gridfs,我正在开发一个应用程序,当一些用户可以添加一个目录并附加一个文件时,它是UI中的一个简单表单。在这种情况下,添加一个文件是可选的,但必须添加一个附件。 如果用户在目录中添加文件。。。我有以下代码: BasicDBObject metadata = new BasicDBObject(); metadata.put("_id", UUID.randomUUID().toString()); metadata.put("comentary", "Hola que hace")

我正在开发一个应用程序,当一些用户可以添加一个目录并附加一个文件时,它是UI中的一个简单表单。在这种情况下,添加一个文件是可选的,但必须添加一个附件。 如果用户在目录中添加文件。。。我有以下代码:

    BasicDBObject metadata = new BasicDBObject();
    metadata.put("_id", UUID.randomUUID().toString());
    metadata.put("comentary", "Hola que hace");
    metadata.put("date", (new Date().toString()));
    metadata.put("applicationID", "1111-111");

    GridFS gridFS = new GridFS(mongoTemplate.getDb(), "noteAndFile");
    GridFSInputFile gfsFile = gridFS.createFile(file);
    gfsFile.put("metadata", metadata);
    gfsFile.save();
此代码可以工作,但用户不添加文件我有以下内容:

    BasicDBObject metadata = new BasicDBObject();
    metadata.put("_id", UUID.randomUUID().toString());
    metadata.put("comentary", "Segundo persist");
    metadata.put("date", (new Date().toString()));
    metadata.put("applicationID", "2222-222");

    GridFS gridFS = new GridFS(mongoTemplate.getDb(), "noteAndFile");
    GridFSInputFile gfsFile = gridFS.createFile();
    gfsFile.put("metadata", metadata);
    gfsFile.save();
但是
gfsFile.save()返回nul。我肯定需要使用这种方式,以获得一个评论列表,有或没有文件附件

    BasicDBObject allComentaryWithOrNotFileAttach = new BasicDBObject();
    List<GridFSDBFile> files = gridFS.find(allComentaryWithOrNotFileAttach);
BasicDBObject allComentaryWithOrNotFileAttach=newbasicdbobject();
List files=gridFS.find(allComentaryWithOrNotFileAttach);

我该怎么做呢?

我想这里唯一缺少的是一个没有文件附件的“空”输入流。这很容易解决:

    String mystring = new String();   // an empty string

    GridFS gridFS = new GridFS(mongoTemplate.getDB(),"noteAndFile");
    GridFSInputFile gfsFile = gridFS.createFile(
        new ByteArrayInputStream( mystring.getBytes() )
    );

    BasicDBObject meta = new BasicDBObject();
    meta.put("comments","hi");

    gfsFile.put("metadata",meta);
    gfsFile.save();

    System.out.println(gfsFile.getId());    // gives me the _id of the object saved
当我在贝壳里寻找时:

> db.noteAndFile.files.findOne()
{
    "_id" : ObjectId("55a909057c712d9f488c88e7"),
    "chunkSize" : NumberLong(261120),
    "length" : NumberLong(0),
    "md5" : "d41d8cd98f00b204e9800998ecf8427e",
    "filename" : null,
    "contentType" : null,
    "uploadDate" : ISODate("2015-07-17T13:54:13.837Z"),
    "aliases" : null,
    "metadata" : {
            "comments" : "hi"
    }
}
当然,因为这里的“bytestream”是空的,所以“chunks”集合没有关联的对象。但这是意料之中的

因此,您可以随时抓取该对象,并在该对象可用时向其添加真实内容