Spring Data for MongoDB是否允许带有可选字段的文档?

Tom*_*wad 0 spring mongodb spring-data spring-data-mongodb

我可以有一个可为空的字段吗?-如果其值为null,则不会在文档中存储该字段(名称或值);以及-如果其值为非null,则将字段名称和值存储在它。

use*_*887 5

是的,可以,只是在创建模型时不设置属性,并且该字段和值不会插入mongodb文档中。为其设置了值的字段,只有那些字段将存储在mongodb文档中。

package org.scalar.test;

import org.scalar.model.Product;
import org.scalar.model.Summary;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.mongodb.core.MongoTemplate;

public class App {

    public static void main(String[] args) {

        ApplicationContext context = new ClassPathXmlApplicationContext("spring/applicationContext.xml");

        for (int i=0;i<10;i++) {
                Product product = new Product();
                product.setId(String.valueOf(i));
                /*Summary summary = new Summary(); */

                MongoTemplate template = (MongoTemplate)context.getBean("mongoTemplate");

                template.save(product);

        }       

        System.out.println("end");
        ((ClassPathXmlApplicationContext)context).close();


    }

}
Run Code Online (Sandbox Code Playgroud)

产品.java

package org.scalar.model;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection="products")
public class Product {

    @Id
    public String id;
    public Summary summary;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Summary getSummary() {
        return summary;
    }
    public void setSummary(Summary summary) {
        this.summary = summary;
    }


}
Run Code Online (Sandbox Code Playgroud)

Mongodb的输出

> db.products.find();
{ "_id" : "0", "_class" : "org.scalar.model.Product" }
{ "_id" : "1", "_class" : "org.scalar.model.Product" }
{ "_id" : "2", "_class" : "org.scalar.model.Product" }
{ "_id" : "3", "_class" : "org.scalar.model.Product" }
{ "_id" : "4", "_class" : "org.scalar.model.Product" }
{ "_id" : "5", "_class" : "org.scalar.model.Product" }
{ "_id" : "6", "_class" : "org.scalar.model.Product" }
{ "_id" : "7", "_class" : "org.scalar.model.Product" }
{ "_id" : "8", "_class" : "org.scalar.model.Product" }
{ "_id" : "9", "_class" : "org.scalar.model.Product" }
Run Code Online (Sandbox Code Playgroud)

高温超导