【问题标题】:Does Spring Data for MongoDB allow documents with optional fields?Spring Data for MongoDB 是否允许带有可选字段的文档?
【发布时间】:2016-10-13 00:24:29
【问题描述】:

我可以有一个可为空的字段: - 如果它的值为空,我们不会将字段(名称或值)存储在文档中,并且 - 如果其值为非空,我们将在其上存储字段名称和值。

【问题讨论】:

  • 这就是MongoDB存储数据的方式。
  • 啊,这是默认设置。我想象空值会被存储,但似乎 OPPOSITE(允许/设置空值)是其他人感兴趣的问题:stackoverflow.com/questions/27187749/…

标签: spring mongodb spring-data spring-data-mongodb


【解决方案1】:

是的,确实如此,只是在创建模型和该字段时不要设置属性,并且该值不会插入到 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();


    }

}

Product.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;
    }


}

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" }

HTH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多