2011-04-23 9 views
2

mongodb 사용 부모 컬렉션 (Listing)의 하위 컬렉션 (listingFeatures)에서 속성 (_id)을 제거하려고합니다. 다른 말로하면, ListFeature 객체 목록이있는 Listing 객체가 있습니다. ListFeature에는 삭제하려고하는 _id 속성이 있습니다.하위 컬렉션에서 속성 제거

db.Listing.update({ "ListingFeatures._id": { $exists:true } }, { $unset: { "ListingFeatures._id": 1 } }, false, true); 

이 (목록은 300 만 개 기록을 가지고),이 오류를 던지거나 어떤을주지 않았다 완료하기 전에 ~ 30 분 동안 실행 : 여기

내가 일하는 것이 생각 나는 시도 명령이다 성공 또는 실패했음을 나타내는 일종의 메시지이지만, Listing.ListingFeatures._id 특성은 여전히 ​​존재합니다.

무엇이 누락 되었습니까?

다음은 샘플 목록 문서입니다. 궁극적으로 ListFeatures 컬렉션에서 _id, CreateDate 및 UpdateDate를 제거하려고합니다.

{ 
    "Address": "1080 DUNLAP ORPHANAGE RD", 
    "City": "Unincorporated", 
    "ListingFeatures": [ 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Status: ACTIVE" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "County: Tipton" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Approximately 10 acre(s)" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "2 total full bath(s)" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "2 total half bath(s)" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "9 total rooms" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "2 stories" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Type: General Residential" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Master Bedroom is Carpet, Full Bath, Level 1, Walk-In Closet" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Basement is Partial, Unfinished" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Pool features: Above Ground" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "2 covered parking space(s)" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Yes car garage(s)" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Attached parking" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Cooling features: 220 Wiring, Dual System,Cooling" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Inclusions: Cooktop, Dishwasher, Gas Cooking, Microwave, Refrigerator, Satellite Dish, Self Cleaning Oven" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Lot features: Chain Fenced, Landscaped, Level, Some Trees, Wooded" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Lot size is between 10 and 20 acres" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Utilities present: Public Water, Septic Tank" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Swimming pool(s)" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Basement" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Den" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Laundry room" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Hardwood floors" 
    }, 
    { 
     "_id": null, 
     "CreateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "UpdateDate": "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
     "Name": "Parking features: Driveway/Pad, Garage Door Opener(s), Storage Room(s), Workshop(s)" 
    } 
    ], 
    "ZipCode": "38011", 
    "_id": { 
    "$oid": "4d99055b1b9ba917bcef9443" 
    } 
} 
+0

'{ "ListingFeatures._id": {$ exists : true}}'쿼리를 사용하지 않고 업데이트를 시도한 적이 있습니까? 그게 효과가 있니? – proximus

+0

그냥 시도하고 _id 속성이 여전히 존재합니다. db.Listing.update ({}, {$ unset : { "ListFeatures._id": 1}}, false, true); – Justin

답변

0

나에게 맞는 편도. 아이 안의 아이와도 함께 일합니다.

var updated_comment = 0; 
db.Document.find().forEach(function(doc){ 

    function remove_errors(comments){ 
     comments.forEach(function(comment){ 
      delete comment.errors 
      updated_comment = updated_comment + 1; 
      remove_errors(comment.comments); 
     }); 
    } 

    remove_errors(doc.comments); 

    db.Document.save(doc); 
}); 

print("done updated_comment = " + updated_comment); 
0

내가 (사실, 당신도 거기에 인덱스를 제거 할 수 없습니다) 당신이 _id을 제거 할 수 없습니다 확신합니다. MongoDB에 의해 예약 된 필드이며 문서 식별자로 사용됩니다. 이

편집

당신은 가서 - $ Position Operator을 사용했다.

> db.stackoverflow.findOne() 
{ 
    "_id" : ObjectId("4db6362c9e631c2a52a7c645"), 
    "Address" : "1080 DUNLAP ORPHANAGE RD", 
    "City" : "Unincorporated", 
    "ListingFeatures" : [ 
     { 
      "someid" : "123", 
      "CreateDate" : "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
      "UpdateDate" : "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
      "Name" : "Approximately 10 acre(s)" 
     }, 
     { 
      "someid" : "456", 
      "CreateDate" : "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
      "UpdateDate" : "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
      "Name" : "2 total full bath(s)" 
     } 
    ], 
    "ZipCode" : "38011" 
} 

이 컬렉션 내에서 someid가 "456"인 CreateDate를 제거 할 수 있습니다.

> db.stackoverflow.update({"ListingFeatures.someid":"456"},{$unset:{"ListingFeatures.$.CreateDate":1}});              

이제 우리는 CreateDate이 someid가 "456"인 요소에서 사라 있는지 확인합니다.

> db.stackoverflow.findOne()                    
{ 
    "Address" : "1080 DUNLAP ORPHANAGE RD", 
    "City" : "Unincorporated", 
    "ListingFeatures" : [ 
     { 
      "someid" : "123", 
      "CreateDate" : "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
      "UpdateDate" : "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
      "Name" : "Approximately 10 acre(s)" 
     }, 
     { 
      "Name" : "2 total full bath(s)", 
      "UpdateDate" : "Sun, 03 Apr 2011 19:40:04 GMT -04:00", 
      "someid" : "456" 
     } 
    ], 
    "ZipCode" : "38011", 
    "_id" : ObjectId("4db6362c9e631c2a52a7c645") 
} 
+0

나는 검사 할 자식 컬렉션에서 다른 속성을 제거하려고 시도했으나 해당 속성이 제거되지 않았기 때문에 _id와 아무런 관련이 없습니다. – Justin

+0

이 컬렉션의 문서를 예제로 붙여 넣을 수 있습니까? – lobster1234

+0

@ lobster1234 - 샘플 doc을 추가 할 원래 질문을 편집했습니다. – Justin