2016-07-04 2 views
3

에서 일부 데이터를 삭제 나는 200000 그래서 삭제 후 항목의 총 수는 372985에서 200000MongoDB를

에 감소 후 372985 이름의 수가, 내가이 작업을 수행 할 수있는 방법 항목을 삭제할있는 MongoDB를 수집해야 에 의해 mongoDB 쿼리?

은 Usecase

내 파이썬 코드 내 컴퓨터 구성에 따라 엄청난 데이터를 처리 할 수없는, 그래서 나는 그것이 제한된 RAM에서 실행할 수 있도록 몽고 모음의 크기를 줄일합니다.

mongo 쿼리로는이 작업을 수행 할 수 없으면 누군가 파이썬이 동일한 작업을 수행 할 때 힌트를 제공 할 수 있습니까?

+0

우리는 스킵을 사용하고 문서 커서 루프 –

+0

@PraneethGudumasu의 레코드를 삭제할 수 있습니다 : 당신은 예에 의해 설명 할 수 있습니까? – x0v

+0

시도 { \t MongoClient 클라이언트 = 새로운 MongoClient ("localhost", 27017); MongoDatabase db = client.getDatabase ("students"); MongoCollection collection = db.getCollection ("grades"); \t MongoCursor cursor = collection.find(). skip (10) .iterator(); 동안 (cursor.hasNext()) { \t \t \t 문서 문서 cursor.next =(); \t \t collection.deleteOne (doc); \t } –

답변

1

MongoDB가 삭제 될 문서와 일치하는 쿼리를 필요로하기 때문에 단계적으로 처리해야합니다. 문서를 제거 할 때 MongoDB는 skip 또는 limit을 사용할 수 없습니다.

  1. 발견 (의 IDS) 삭제하려는 문서, 1

당신은 시도 할 수 있습니다에있는 목록에 속하는 문서를 삭제 200000

  • 후 문서로 이동로 이동하여 몽고 쉘에서 :

    var to_delete = db.collection.find({}, {_id : 1}) 
         .skip(200000) 
         .toArray() 
         .map(function(doc) { return doc._id; }); 
    
    db.collection.remove({_id: {$in: to_delete}}) 
    
  • +0

    감사합니다. – x0v