属性写法是这样的:
[BsonDictionaryOptions(DictionaryRepresentation.ArrayOfDocuments)]public Dictionary<string, int> extra_info { get; set; }
这三种属性下,保存在数据集中的数据结构有区别。
DictionaryRepresentation.Document:
{"extra_info" : {
"type" : NumberInt(1),
"mode" : NumberInt(2)
}
}
DictionaryRepresentation.ArrayOfDocuments:
{"extra_info" : [
{
"k" : "type",
"v" : NumberInt(1)
},
{
"k" : "mode",
"v" : NumberInt(2)
}
]
}
DictionaryRepresentation.ArrayOfArrays:
{"extra_info" : [
[
"type",
NumberInt(1)
],
[
"mode",
NumberInt(2)
]
]
}
这三种方式,从数据保存上并没有什么区别,但从查询来讲,如果这个字段需要进行查询,那三种方式区别很大。
如果采用BsonDocument方式查询,DictionaryRepresentation.Document无疑是写着最方便的。
如果用Builder方式查询,DictionaryRepresentation.ArrayOfDocuments是最容易写的。
DictionaryRepresentation.ArrayOfArrays就算了。数组套数组,查询条件写死人。
我自己在使用时,多数情况用DictionaryRepresentation.ArrayOfDocuments。
五、其它映射属性上一章介绍了数据映射的完整内容。除了这些内容,MongoDB还给出了一些映射属性,供大家看心情使用。
1. BsonElement属性这个属性是用来改数据集中的字段名称用的。
看代码:
[BsonElement("pt")]public DateTime post_time { get; set; }
在不加BsonElement的情况下,通过数据映射写到数据集中的文档,字段名就是变量名,上面这个例子,字段名就是post_time。
加上BsonElement后,数据集中的字段名会变为pt。
2. BsonDefaultValue属性看名称就知道,这是用来设置字段的默认值的。
看代码:
[BsonDefaultValue("This is a default title")]public string title { get; set; }
当写入的时候,如果映射中不传入值,则数据库会把这个默认值存到数据集中。
3. BsonRepresentation属性这个属性是用来在映射类中的数据类型和数据集中的数据类型做转换的。
看代码:
[BsonRepresentation(BsonType.String)]public int favor { get; set; }
这段代表表示,在映射类中,favor字段是int类型的,而存到数据集中,会保存为string类型。
前边Decimal转换和枚举转换,就是用的这个属性。
4. BsonIgnore属性这个属性用来忽略某些字段。忽略的意思是:映射类中某些字段,不希望被保存到数据集中。
看代码:
[BsonIgnore]public string ignore_string { get; set; }
这样,在保存数据时,字段ignore_string就不会被保存到数据集中。
六、总结数据映射本身没什么新鲜的内容,但在MongoDB中,如果用好了映射,开发过程从效率到爽的程度,都不是SQL可以相比的。正所谓:
一入Mongo深似海,从此SQL是路人。
谢谢大家!
(全文完)
本文的配套代码在https://github.com/humornif/Demo-Code/tree/master/0015/demo
微信公众号:老王Plus