我已经配置了我的MongoDB 2.0.2实例(更新:也尝试使用v2.2.0实例)将所有操作记录到system.profile
集合(即db.setProfilingLevel(2)
)并且正在尝试在为新 doc调用save()时,确切了解应用程序正在插入哪些数据。
我可以在system.profile
集合中看到'insert'操作,但它不包含要插入的数据。那是为什么?
相比之下,system.profile
中记录的更新操作有一个'updateobj'属性,用于显示数据。
以下是2.2.0实例的示例。如您所见,配置文件日志包含带有“updateObj”数据的更新条目。但是,插入没有关于插入内容的任何信息。
> use test;
switched to db test
> db.getProfilingStatus();
{ "was" : 2, "slowms" : 100 }
> show collections;
cartoons
system.indexes
system.profile
> db.foobar.insert({ "blah": true });
> db.foobar.update({ "blah": true }, { $set: { blerg: 1 } });
> db.system.profile.find({ ns:"test.foobar" });
{
"ts": ISODate("2012-09-25T20:37:40.287Z"),
"op": "insert",
"ns": "test.foobar",
"keyUpdates": 0,
"numYield": 0,
"lockStats": {
"timeLockedMicros": {
"r": NumberLong(0),
"w": NumberLong(2028)
},
"timeAcquiringMicros": {
"r": NumberLong(0),
"w": NumberLong(10)
}
},
"millis": 2,
"client": "127.0.0.1",
"user": ""
}{
"ts": ISODate("2012-09-25T20:38:11.454Z"),
"op": "update",
"ns": "test.foobar",
"query": {
"blah": true
},
"updateobj": {
"$set": {
"blerg": 1
}
},
"nscanned": 1,
"moved": true,
"nmoved": 1,
"nupdated": 1,
"keyUpdates": 0,
"numYield": 0,
"lockStats": {
"timeLockedMicros": {
"r": NumberLong(0),
"w": NumberLong(1797)
},
"timeAcquiringMicros": {
"r": NumberLong(0),
"w": NumberLong(9)
}
},
"millis": 1,
"client": "127.0.0.1",
"user": ""
}
答案 0 :(得分:1)
最初误导你的道歉,事实证明这是故意的(我原来的回答与这是一个记录慢速操作的错误有关)。不这样做的想法是你只需要通过打开它来自动加倍写入负载,因为你实际上只是写了两次相同的信息(实际上多一点)。
由于分析的想法通常是为了解决性能问题,因此尚未将其作为默认值实现。但是,它已被要求作为一种选择:
https://jira.mongodb.org/browse/SERVER-3848
正如您所看到的,它尚未安排用于某个版本,但投票和评论概述了为什么这样做有用,在决定实施哪些内容时会有所帮助。