Удаление документов в коллекции монго с атрибутом _id заданного типа BSON

У меня есть коллекция, в которой _id каждого документа имеет строковый тип. Из-за какой-то проблемы мы вставили некоторые документы с неправильным _id типа ObjectId.

{
  "_id": "M123",
  "title": "Test",
  ...
}
{
  "_id": ObjectId("566de977e4b075b86383b629"),
  "title": "Test",
  ...
}

Теперь я хочу удалить все документы, похожие на второй. Есть ли способ указать этот запрос на db.Collection1.remove()?

Я попытался выполнить поиск в Google, где нашел запросы, в которых указаны условия для определенных значений полей, а не их типы.


person Ravi Chandra    schedule 17.03.2016    source источник
comment
См. $type.   -  person Blakes Seven    schedule 17.03.2016
comment
Я попробовал следующий запрос. db.Collection1.find({_id:{$type: objectId}}).count() 2016-03-17T16:26:25.271+0530 E QUERY Ошибка: ошибка подсчета: {код: 10061, ok: 0, errmsg: исключение: тип не поддерживается для appendMinElementForType } при ошибке (‹anonymous›) в DBQuery.count (src/mongo/shell/query.js:326:11) в (shell):1:44 в src/mongo/shell/query .js:326   -  person Ravi Chandra    schedule 17.03.2016
comment
Значения "alias" поддерживаются только в MongoDB 3.2. Все версии используют числовое значение. Например, чтобы просто найти _id с типом BSON строки db.Album.find({ "_id": { "$type": 2 } }), которая, конечно же, имеет тип BSON 2 в числовом виде.   -  person Blakes Seven    schedule 17.03.2016
comment
Спасибо @BlakesSeven, я могу удалить документы, используя запрос 'db.Collection1.remove({_id:{$type: 7}})'   -  person Ravi Chandra    schedule 17.03.2016


Ответы (1)


Я могу удалить строки с _id типа ObjectId, используя следующий запрос.

db.Collection1.remove({"_id":{$type: 7}})

Это для более старой версии монго до 3.0. Для более новых версий вы также можете использовать

db.Collection1.remove({"_id":{$type: "objectId"}})
person Ravi Chandra    schedule 17.03.2016