首页 新闻 会员 周边 捐助

MongoDB 保存数据时自动生成列的疑问

0
悬赏园豆:10 [已解决问题] 解决于 2014-09-26 14:46

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);

}

achievie的主页 achievie | 初学一级 | 园豆:6
提问于:2014-09-26 11:52
< >
分享
最佳答案
0

建议看下具体的驱动使用说明。如@ArnoldZhang所说,mongo自身只会生成_Id主键。

收获园豆:8
幻天芒 | 高人七级 |园豆:37207 | 2014-09-26 13:20

用的是  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; }
}

 

achievie | 园豆:6 (初学一级) | 2014-09-26 13:39

@董先生: 因为你的实体是分部类:public partial class User,所以部分属性可能在其他文件中,检查下吧。

 

还有,看了下你生成的json字符串,发现你所说的属性是在_id下的。这种情况的话是驱动帮你把_id解析出来了。这个涉及到mongo的_id生成规则,它生成_id就是由这几个属性共同运算决定的。所以这个结果是正常的。

幻天芒 | 园豆:37207 (高人七级) | 2014-09-26 13:46

@幻天芒:  不是这个实体类的问题。已经检查过了。应该是这样的:

http://www.cnblogs.com/xjk15082/archive/2011/09/18/2180792.html

我只是觉得这些列有些多余,网络传输时会增加传输带宽。其实可以不用 Newtonsoft.Json.dll  这个类库。可以自己手动拼接成json  字符串。

achievie | 园豆:6 (初学一级) | 2014-09-26 13:55

@董先生: 嗯,对,就是因为把ID解析了。

幻天芒 | 园豆:37207 (高人七级) | 2014-09-26 22:20
其他回答(1)
0

应该不会的。我测试的只自动生成一个_Id。你好好检查一下

收获园豆:2
悟行 | 园豆:12559 (专家六级) | 2014-09-26 12:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册