Spring MongoDB 的数据是否允许包含可选字段的文档?
Does Spring Data for MongoDB allow documents with optional fields?
我可以有一个可为空的字段吗:
- 如果它的值为 null,我们不会将字段(名称或值)存储在文档中,并且
- 如果它的值为非空,我们将在其上存储字段名称和值。
是的,只是在创建模型时不设置 属性,该字段和值将不会插入到 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
我可以有一个可为空的字段吗: - 如果它的值为 null,我们不会将字段(名称或值)存储在文档中,并且 - 如果它的值为非空,我们将在其上存储字段名称和值。
是的,只是在创建模型时不设置 属性,该字段和值将不会插入到 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