简体   繁体   中英

Define and Retrieve key-values in MongoDB

I want to define a document in MongoDB in order to keep a list of key-value pairs in addition to some more information . I need to query on keys and extract just values , not whole the document. Let's say it looks like:

{  title :” Do not stop me now”
   Artist: “Queen”
   Info :{
    Metadata: [
    {key: “genre”, value: “Rock” },
    {key: “bps”, value: 120}
    ]
   }
}

I selected this format based on http://java.dzone.com/articles/indexing-schemaless-documents

I want to query like select “genre” from song where artist is “Queen” My current code is:

BasicDBObject eleMatch = new BasicDBObject();
eleMatch.put("key","genre");
BasicDBObject up = new BasicDBObject();
up.put("$elemMatch",eleMatch);


BasicDBObject query = new BasicDBObject();
query.put("info.Metadata", up);
query.put(“Artist”,”Queen”);
BasicDBObject fields = new BasicDBObject("info.Metadata.$",1).append("_id", false); 
DBObject object =collection.findOne(query,fields);

I tried to extract value like:

System.out.println( (((BasicBSONList) ((BasicBSONObject)    object.get("info")).get("Metadata")).get("value")).toString());

But I cannot get access to "value"

How I can solve it?

The positional operator return an array of one element. So, what you are converting to string is an array and of course you will get a kind of java id. Cast it to array and get its first element

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM