MongoDB 插入数据时自动生成这些列 Machine ,pid ,TimeStamp,Increment 等等,这些列是必须的吗?能否去掉以及怎样去掉。烦请熟悉MongoDB 的高手赐教。不甚感激!
保存数据时代码如下:
/// <summary>
/// 将数据插入进数据库
/// </summary>
/// <typeparam name="T">需要插入数据库的实体类型</typeparam>
/// <param name="t">需要插入数据库的具体实体</param>
/// <param name="collectionName">指定插入的集合</param>
public void Insert<T>(T t, string collectionName)
{
MongoCollection<BsonDocument> mc = this._db.GetCollection<BsonDocument>(collectionName);
//将实体转换为bson文档
BsonDocument bd = t.ToBsonDocument();
//进行插入操作
WriteConcernResult result = mc.Insert(bd);
}
建议看下具体的驱动使用说明。如@ArnoldZhang所说,mongo自身只会生成_Id主键。
用的是 Newtonsoft.Json.dll 把一个User集合序列化成字符串,内容如下:
[
{
"_id": {
"Timestamp": 1411709804,
"Machine": 12857379,
"Pid": 9568,
"Increment": 2258925,
"CreationTime": "2014-09-26T05:36:44Z"
},
"UID": "2",
"NAME": "jacklv",
"SEX": "女",
"AGE": 22,
"CreatedTime": "2014-09-26 13:36:44"
}
]
User 实体
public partial class User
{
public ObjectId _id;
public string UID { get; set; }
public string NAME { get; set; }
public string SEX { get; set; }
public int AGE { get; set; }
public string CreatedTime { get; set; }
}
@董先生: 因为你的实体是分部类:public partial class User,所以部分属性可能在其他文件中,检查下吧。
还有,看了下你生成的json字符串,发现你所说的属性是在_id下的。这种情况的话是驱动帮你把_id解析出来了。这个涉及到mongo的_id生成规则,它生成_id就是由这几个属性共同运算决定的。所以这个结果是正常的。
@幻天芒: 不是这个实体类的问题。已经检查过了。应该是这样的:
http://www.cnblogs.com/xjk15082/archive/2011/09/18/2180792.html
我只是觉得这些列有些多余,网络传输时会增加传输带宽。其实可以不用 Newtonsoft.Json.dll 这个类库。可以自己手动拼接成json 字符串。
@董先生: 嗯,对,就是因为把ID解析了。
应该不会的。我测试的只自动生成一个_Id。你好好检查一下