【发布时间】:2012-08-26 13:05:28
【问题描述】:
我们正在使用 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. 代码插入两个方括号而不是一个方括号来容纳数组
2. 为什么没有为列表生成_id。
请告诉我。
问候,维什
【问题讨论】:
-
对于您的第一个问题:如果字段是现有数组,则 $push 将值附加到字段,否则如果字段不存在,则将字段设置为数组 [值]。由于您使用 $push 插入列表,因此它会创建两个方括号。对于你的第二个问题,我不知道为什么 _id 没有生成。
标签: java mongodb arraylist save