Spring MongoDB - Array对象变为null

时间:2015-06-28 06:48:31

标签: java arrays spring mongodb

我有一个mongo集合,它有一个ObjectId的嵌入式数组,所以一般格式如下:

{
    "_id" : ObjectId("123abc..."),
    "Active" : [ 
        {
            "Id" : ObjectId("123abc...")
        }, 
        {
            "Id" : ObjectId("123abc...")
        }, 
        ...,
        {
            "Id" : ObjectId("123abc...")
        }
    ],
    "field1" : "blah blah",
    "field2" : "blah blah",
    "field3" : "blah blah",
    "field4" : "blah blah"
    "field5" : ObjectId("123abc...")
}

我的Java类非常简单:

@Document(collection="MyCollection")
public class MyCollection {

    @Id
    private ObjectId id;
    private String field1;
    ...
    private ObjectId field5;
    @Field("Active")
    private List<Active> active;

    // Getters & Setters here

   public static class Active {
    @Field("Id")
    private ObjectId id;

    public ObjectId getId() {
        return id;
    }

    public void setId(ObjectId id) {
        this.id = id;
    }
  }
}

当我进行查询时,所有内容都会正确显示,但是&#34; Active&#34;领域。如果该数组中有18个条目,我将得到一个大小为18的List,但是Active.class的18个条目都是null - 所以它得到它的列表,它只是永远不会超过其中的ObjectId值有源阵列。

我使用Spring和Spring mongo驱动程序。

编辑:如果我使用mongo-java-driver并以这种方式查询:

    DB database = mongoClient.getDB("myDB");
    DBCollection collection = database.getCollection("MyCollection");

    DBObject query = new BasicDBObject("_id", new ObjectId("123abc..."));
    DBCursor cursor = collection.find(query);
    DBObject jo = cursor.one();

它有效,我得到了我正在寻找的整个文档 - 所以我假设有一种方法可以用Spring方式做到这一点吗?

2 个答案:

答案 0 :(得分:0)

在我的pom.xml中使用这些版本之前:

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>2.12.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.6.1.RELEASE</version>
    </dependency>

通过更新为每个版本更新的版本:

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.7.0.RELEASE</version>
    </dependency>

我能够解决这个问题。所以现在当我查询时:

        return Arrays.asList(mongoTemplate.findById(new ObjectId("123abc..."), Foo.class));

ObjectId的数组完好无损(之前我会得到一个正确大小的数组 - 所以它知道有18个 - 但它是一个空数组。

答案 1 :(得分:0)

为什么不在MyCollection类中使用注释@Id?

public static class Active {
 @Id
 private ObjectId id;

}