Query on MongoDB GridFS metadata (Java)

后端 未结 3 721
猫巷女王i
猫巷女王i 2021-01-02 07:26

What I\'m trying to do is fetching a list of GridFS files by querying an field of the metadata. For example I got a GridFS file document looking like:

{ \"_i         


        
3条回答
  •  醉梦人生
    2021-01-02 08:18

    From MongoDB documentation (http://docs.mongodb.org/manual/tutorial/query-documents/#exact-match-on-the-embedded-document):

    Exact Match on the Embedded Document

    To specify an equality match on the whole embedded document, use the query document { : } where is the document to match. Equality matches on an embedded document require an exact match of the specified , including the field order.

    Equality Match on Fields within an Embedded Document

    Use the dot notation to match by specific fields in an embedded document. Equality matches for specific fields in an embedded document will select documents in the collection where the embedded document contains the specified fields with the specified values. The embedded document can contain additional fields.


    I wrote a simple code to translate the "document notation" in "dotted notation" . I hope it's useful.

    protected static void toDottedJson(Object o, String key, DBObject query) {
        if (o instanceof Map)
            for (Entry c : ((Map) o).entrySet())
                toDottedJson(c.getValue(), key + "." + c.getKey().toString(),
                        query);
        else
            query.put(key, o.toString());
    }
    
    public static DBObject buildMetadataSearchQuery(DBObject searchQuery) {
        BasicDBObject metadatSearchQuery = new BasicDBObject();
        for (Entry c : ((Map) searchQuery).entrySet())
            toDottedJson(c.getValue(), "metadata."
                    + c.getKey().toString(),
                    metadatSearchQuery);
        return metadatSearchQuery;
    }
    

    For your purpose:

    List files = gridFs.find(buildMetadataSearchQuery(new BasicDBObject("target_field", "abcdefg")));
    

提交回复
热议问题