Удалить свойство из дочерней коллекции - PullRequest
2 голосов
/ 24 апреля 2011

Используя mongodb, я пытаюсь удалить свойство (_id) из дочерней коллекции (ListingFeatures) его родительской коллекции (Listing).Другими словами, у меня есть объект Listing, в котором есть список объектов ListingFeature.ListingFeature имеет свойство _id, которое я пытаюсь удалить.

Вот команда, которую я попробовал, и я подумал, что она будет работать:

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

Это выполнялось в течение ~ 30 минут до завершения (Листинг содержит 3 миллиона записей), он не выдавал никаких ошибок и не выдавал никаких сообщений о том, что он был успешным или неудачным, однако свойство Listing.ListingFeatures._id все еще существует.

Чего мне не хватает?

Вот урезанный образец документа Листинга.В конечном итоге я хочу удалить _id, CreateDate и UpdateDate из коллекций ListingFeatures.

{
  "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"
  }
}

Ответы [ 2 ]

0 голосов
/ 28 октября 2011

Только один путь с работой для меня.Работайте даже с ребенком внутри ребенка.

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 голосов
/ 25 апреля 2011

Я почти уверен, что вы не можете удалить _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"
}

Позволяет удалить CreateDate, где someid равен "456" в этой коллекции.

> 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")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...