2013-06-24 2 views
0

Итак, у меня есть приложение, в котором используется много встроенных документов, что хорошо. Однако я заметил, что некоторые встроенные документы не отображаются, когда вы show collections в оболочке Mongo.Удаление встроенного документа без сборки через оболочку Mongo

Как правило, это не проблема, но, когда вы устанавливаете встроенные документы, я случайно добавил пустую запись в одну из записей. Обычно я делал что-то подобное, чтобы удалить запись db.collection.remove({_id: ObjectId('<OBJECT_ID>')}), но поскольку некоторые из них не являются фактическими коллекциями, я не могу это сделать.

Я также не знаю, как я смог бы успешно выполнить это, фактически удалив документ. Я мог бы связать его с записью, но у меня есть ощущение, что он оставит этот встроенный документ плавающим где-то в БД.

Любые идеи, как это сделать?

Чтобы дать вам представление о том, что я говорю, пример записи:

entry = { 
    _id: ObjectId('blah blah blah'), 
    name: { 
     first: 'example', 
     last: 'city' 
    }, 
    log : [ 
     { 
      _id: ObjectId('some id'), 
      action: 'whatever', 
      someField: 'etc.' 
     }, 
     { 
      _id: ObjectId('another id') 
     }, 
     { 
      _id: ObjectId('yet another id'), 
      action: 'who cares', 
      someField: 'data' 
     } 
    ] 
} 
+0

Что вы хотите удалить из этого документа? одна из записей журнала? Почему бы не использовать db.collection.update ({_ id: blah blah}, {$ pull: {"log._id": another_id}})? –

+0

Я хочу удалить одну запись, находящуюся в массиве. Казалось бы, что $ pull было тем, что я искал. Если вы хотите добавить это как ответ с небольшим пояснением и ссылкой на документацию, я был бы рад принять ваш ответ. –

ответ

1

Если вы хотите удалить один из записей журнала, то вы хотите $pull operator.

Формат будет что-то вроде:

db.collection.update({_id:<id-of-document-to-update>}, 
        {$pull:{"log._id":<id-of-log-entry-to-remove>"}} 
) 

Это говорит, найти документ с определенным _id и удалить из журнала массива запись с определенным sub_id.