如何防范攻击
- 1.做好访问认证,打开你的MongoDB配置文件(.conf),设置为auth=true
- 2.做好防火墙的设置,建议管理者关闭27017端口的访问
- 3.Bind_ip 绑定内网ip访问
- 4.做好升级,请管理者将软件升级到最新版
SpringBoot中MongoDB注解概念及使用
- 1.@Id
主键,不可重复,自带索引,可以在定义的列名上标注,需要自己生成并维护不重复的约束。如果自己不设置@Id主键,mongo会自动生成一个唯一主键,并且插入时效率远高于自己设置主键。 - 2.@Document
标注在实体类上,类似于hibernate的entity注解,标明由mongo来维护该表。 - 3.@Indexed
声明该字段需要加索引,加索引后以该字段为条件检索将大大提高速度。
唯一索引的话是@Indexed(unique = true)。
也可以对数组进行索引,如果被索引的列是数组时,MongoDB会索引这个数组中的每一个元素。
也可以对整个Document进行索引,排序是预定义的按插入BSON数据的先后升序排列。
也可以对关联的对象的字段进行索引,譬如User对关联的address.city进行索引。 - 4.@CompoundIndexes
复合索引,加复合索引后通过复合索引字段查询将大大提高速度。
@Document
@CompoundIndexes({
@CompoundIndex(name="name_city", def="{'name':1, 'city':-1}" )
})
public class User{
}
写法如上,name和city将作为复合索引,数字参数指定索引的方向,1为正序,-1为倒序。方向对单键索引和随机存不要紧,但如果你要执行分组和排序操作的时候,它就非常重要了。
- 5.@Field
代表一个字段,可以不加,不加的话默认以参数名为列名。 - 6.@Transient
被该注解标注的,将不会被录入到数据库中。只作为普通的javaBean属性。 - 7.@DBRef
在使用mongdb的时候经常会遇到一个集合嵌套了另一个集合的情况,如果不用引用的话,就得自己手动写代码冗余数据,修改的时候就比较麻烦,要同时修改多处。用mongodb提供的$ref 能很好的解决这个问题
首先写个例子
@Document
public class Department{
private String id;
private String name;
@DBRef
private People leader;
}
@Document
public class People{
private String id;
private String name;
private Integer age;
}
每个部门都需要个领导leader,这个时候用外键非常合适使用很简单,只要在要用到外键的字段上,加上@DBRef就可以了。先创建个People集合,保存写people信息,然后再创建Department集合,可以发现Department存储的时候leader变成了一个引用类型。
{
"_id" : ObjectId("5b10a741628e881fc8848d21"),
"name" : "财政部",
"leader" : DBRef("People", ObjectId("5b0cf065fde29f25486bf532")),
}
那么查询的时候,如果要根据leader查询班级怎么办,@DBRef的查询也非常简单。
public Department findByLeaderId(String leaderId) {
return mongoOperations.findOne(
query(where("leader.$id").is(new ObjectId(leaderId))),
GhostFriend.class);
}
这里注意2个地方,第一个就是引用的时候要加上$id,这样才能表示此id是引用,第二个地方就是new ObjectId() 在自定义复杂查询哪里有提到为什么要new ObjectId()。
- 8.@Query
通过将org.springframework.data.mongodb.repository.Query注释添加到存储库查询方法,您可以指定要使用的MongoDB JSON查询字符串,而不是从方法名称派生查询。
public interface PersonRepository extends MongoRepository<Person, String>
@Query(value="{ 'firstname' : ?0 }", fields="{ 'firstname' : 1, 'lastname' : 1}")
List<Person> findByThePersonsFirstname(String firstname);
}
- 9.@GeoSpatialIndexed:
应用于现场级别来描述如何对该字段进行地理索引。
在新的mongodb1.9之后mongodb支持新的注解
- 10.@TextIndexed
应用于字段级别以标记要包含在文本索引中的字段。 - 11.@TextScore
一旦实体包含@TextScore注释属性,就可以检索文档的全文分数