2015-10-26 2 views
1

Использование собственного драйвера Nodejs с MongoDB 2.4 и попытка удалить свойство из документов, встроенных в массив. Например. как я могу удалить свойство gym из документов, встроенных в массив grades, где gym is 562e7c1ae6c3e8ce29abfe05? Так что с этого:Как удалить свойство из документа, встроенного в массив, используя MongoDB?

{ 
    "_id" : ObjectId("562abaaffb5870b8fb9dca3f"), 
    "grades" : [ 
     { 
      "_id" : ObjectId("562e7bbe70ee82bb290192bd"), 
      "discipline" : "55aae5b7848b9c8bf4ecbb5c", 
      "grade" : "55aae5b7848b9c8bf4ecbb4c", 
      "gym" : "562e7c1ae6c3e8ce29abfe06", 
      "registeredOn" : ISODate("2015-10-26T19:15:10.565Z") 
     }, 
     { 
      "discipline" : "55aae5b7848b9c8bf4ecbb5c", 
      "grade" : "55aae5b7848b9c8bf4ecbb4d", 
      "gym" : "562e7c1ae6c3e8ce29abfe05", 
      "registeredOn" : ISODate("2015-10-26T19:17:08.603Z"), 
      "_id" : ObjectId("562e7c34e6c3e8ce29abfe06") 
     } 
    ], 
}, 
{ 
    "_id" : ObjectId("562abaaffb5870b8fb9dca3f"), 
    "grades" : [ 
     { 
      "_id" : ObjectId("562e7bbe70ee82bb290192bd"), 
      "discipline" : "55aae5b7848b9c8bf4ecbb5c", 
      "grade" : "55aae5b7848b9c8bf4ecbb4c", 
      "gym" : "562e7c1ae6c3e8ce29abfe07", 
      "registeredOn" : ISODate("2015-10-26T19:15:10.565Z") 
     }, 
     { 
      "discipline" : "55aae5b7848b9c8bf4ecbb5c", 
      "grade" : "55aae5b7848b9c8bf4ecbb4d", 
      "gym" : "562e7c1ae6c3e8ce29abfe05", 
      "registeredOn" : ISODate("2015-10-26T19:17:08.603Z"), 
      "_id" : ObjectId("562e7c34e6c3e8ce29abfe06") 
     } 
    ], 
} 

мне это нужно:

{ 
    "_id" : ObjectId("562abaaffb5870b8fb9dca3f"), 
    "grades" : [ 
     { 
      "_id" : ObjectId("562e7bbe70ee82bb290192bd"), 
      "discipline" : "55aae5b7848b9c8bf4ecbb5c", 
      "grade" : "55aae5b7848b9c8bf4ecbb4c", 
      "gym" : "562e7c1ae6c3e8ce29abfe06", 
      "registeredOn" : ISODate("2015-10-26T19:15:10.565Z") 
     }, 
     { 
      "discipline" : "55aae5b7848b9c8bf4ecbb5c", 
      "grade" : "55aae5b7848b9c8bf4ecbb4d", 
      "registeredOn" : ISODate("2015-10-26T19:17:08.603Z"), 
      "_id" : ObjectId("562e7c34e6c3e8ce29abfe06") 
     } 
    ], 
}, 
{ 
    "_id" : ObjectId("562abaaffb5870b8fb9dca3f"), 
    "grades" : [ 
     { 
      "_id" : ObjectId("562e7bbe70ee82bb290192bd"), 
      "discipline" : "55aae5b7848b9c8bf4ecbb5c", 
      "grade" : "55aae5b7848b9c8bf4ecbb4c", 
      "gym" : "562e7c1ae6c3e8ce29abfe07", 
      "registeredOn" : ISODate("2015-10-26T19:15:10.565Z") 
     }, 
     { 
      "discipline" : "55aae5b7848b9c8bf4ecbb5c", 
      "grade" : "55aae5b7848b9c8bf4ecbb4d", 
      "registeredOn" : ISODate("2015-10-26T19:17:08.603Z"), 
      "_id" : ObjectId("562e7c34e6c3e8ce29abfe06") 
     } 
    ], 
} 

Ничто не похоже на работу и ближе меня к тому, что мне нужно:

collections.users.update({ 
    "grades.gym": { 
     $exists: true 
    } 
}, { 
    $unset: { 
     "grades.$.gym": "562e7c1ae6c3e8ce29abfe05" 

    } 
}, { 
    multi: true 
}) 

ответ

1

Просто пункт вложенного поля документа как ваш запрос на обновление:

db.users.update(
    { 
     "grades.gym": "562e7c1ae6c3e8ce29abfe05" 
    }, 
    { 
     "$unset": { 
      "grades.$.gym": "562e7c1ae6c3e8ce29abfe05" 
     } 
    }, { "multi": true } 
) 
Смежные вопросы