我正在使用pymongo(mongodb的python模块)。
我希望服务器自动创建ObjectID,但是当我们没有指定它时,它似乎是由pymongo自己创建的。
它引发的问题是我使用ObjectID按时间排序(仅通过_id字段排序)。但是它似乎正在使用每台计算机上设置的时间,因此我们无法真正依赖它。 关于如何解决这个问题的任何想法?
答案 0 :(得分:3)
如果您致电save
并将其传递给没有_id
字段的文档,则可以通过设置(神秘命名)来强制服务器添加_id
而不是客户端manipulate
的{{1}}选项:
False
答案 1 :(得分:1)
我不是Python用户,但我担心无法通过服务器生成_id。出于性能原因,_id总是由驱动程序生成,因此当您插入文档时,您不需要再执行其他查询来获取_id。
通过生成int序列_id,可以这样做,就像SqlServer的IDENTITY
ID一样。要做到这一点,你需要在某个集合中保留一个记录,例如在我的项目中有一个seed
,它只有一个记录:
{_id: ObjectId("..."), seqNo: 1 }
诀窍是,你必须使用findAndModify来保持查找并修改相同的"事务"。
var idSeed = db.seed.findAndModify({
query: {},
sort: {seqNo: 1},
update: { $inc: { seqNo: 1 } },
new: false
});
var id = idSeed.seqNo;
通过这种方式,您可以让所有实例获得唯一的序列#,您可以使用它来对记录进行排序。