저는 파이썬 사용자가 아니지만 서버로 _id를 생성 할 수있는 방법이 없습니다. 성능상의 이유로 _id는 항상 드라이버에 의해 생성되므로 문서를 삽입 할 때 _id를 다시 얻기 위해 다른 쿼리를 수행 할 필요가 없습니다.
IDENTITY
ID와 마찬가지로 int sequence _id를 생성하여 SqlServer의 ID를 생성 할 수 있습니다.
{_id: ObjectId("..."), seqNo: 1 }
트릭은, 당신이 찾기를 유지하기 위해 findAndModify를 사용해야하고 이렇게하려면, 당신은 내 프로젝트에 예를 들어, 특정 컬렉션의 기록을 유지해야 할 단 하나 개의 기록을 가지고있는하는 seed
을있다 동일한 "거래"에서 수정하십시오.
var idSeed = db.seed.findAndModify({
query: {},
sort: {seqNo: 1},
update: { $inc: { seqNo: 1 } },
new: false
});
var id = idSeed.seqNo;
이렇게하면 모든 인스턴스에 고유 한 시퀀스 #가 생기고 레코드를 정렬하는 데 사용할 수 있습니다. 당신이 save
를 호출하고 _id
필드없이에게 문서를 전달하면
멋지 네요! 그것으로 어떤 심각한 단점 (성능 ...)? – koushkov
@ user3474490 당신이 [sharding] (http://docs.mongodb.org/manual/sharding/)을 사용할 때 단점이있는 것 같아요. 이것은 실패 할 것입니다. (ObjectId는 서버를 샤딩하여 생성 될 것입니다.) 당신이 안 간다면, 이것은 제 해결책보다 확실히 좋습니다. – yaoxing
@ user3474490 성능 저하가 없어야합니다. 단순히'_id'가 생성되는 지점을 재배치합니다. – JohnnyHK