私たちは Java サーバーと Mongo DB [プレーンな Java-Mongo であり、Morphia や CRUD 用のツールではありません] を使用しています。
以下のような Image Pojo クラスとそれに関連するメタデータがあります。
public class Img{
private String name;
private List<Metadata> imgMetaList = new ArrayList<Metadata>();
//Getters, setters etc...
public List<Metadata> getImgMetaList() {
return imgMetaList;
}
}
メタデータ クラスにデータがあり、Serializable の実装がうまくいかなかったので、
ReflectionDBObject を拡張しました。
public class Metadata extends ReflectionDBObject{
private String tag;
private String val;
//Getters, setters etc...
}
Img を Mongo に保存したい。次のコードを使用しましたが、うまくいきました。
BasicDBObject updateQuery = new BasicDBObject();
updateQuery.put("name", img.getName());
BasicDBObject updMetadata = new BasicDBObject();
updMetadata.put("$push", new BasicDBObject("imgMetaList",img.getImgMetaList()) );
collection.update(updateQuery,updMetadata, true, false);
これにより、以下のように Mongo にドキュメントが挿入されます。
{
"_id" : ObjectId("503a1991db2e9f431cf0d162"),
"name" : "test.jpg",
"imgMetaList" : [
[
{
"Tag" : "tag1",
"Val" : "val1",
"_id" : null
}
]
]
}
ここには 2 つ
の問題があります。1. コードは、配列を格納するために 1 つではなく 2 つの角かっこを挿入しています
。2. リストに対して _id が生成されないのはなぜですか。
私にお知らせください。
よろしく、ヴィッシュ