2014-11-19 5 views
1

В моей коллекции у меня есть несколько докторов с некоторым имеющим _id поля как строки и некоторые другие, как тип ObjectIdУдалить все документы типа ObjectId как поле _ID в MongoDB

{_id:"xxxx"} 
{_id:"yyyy"} 
{_id:"ObjectId(zzz)"} 
{_id:"ObjectId(xxxssssx)"} 

Я хочу удалить тип _id поля ObjectId (здесь последние документы)

Есть ли решение для этого?

ответ

1

Если документ имеет ObjectId вы можете использовать $type

Для примера, если ваша коллекция как

{ 
    "_id" : "foo" 
} 


{ 
    "_id" : "bar" 
} 


{ 
    "_id" : ObjectId("546c52074e418d78ff419897") 
} 


{ 
    "_id" : ObjectId("546c52074e418d78ff419898") 
} 

Удалить только ObjectId

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

если ваш ObjectId походит

{_id:"ObjectId(zzz)"} 
{_id:"ObjectId(xxxssssx)"} 

вы можете сделать это

db.coll.remove({"_id": {$regex:"^ObjectId"}})

, если вы хотите удалить только один документ

db.coll.remove({"_id": {$regex:"^ObjectId"}},{justOne:true})

Очевидно, что конкретный _id

db.coll.remove({"_id" : "ObjectId(xxxssssx)"}) 
+0

Когда я запускаю 'дб .coll.remove ({_ id: {$ type: 7}}) 'все документы в co удаляются, у меня есть резервная копия :) :) – Sasikanth

+0

@iAmME с 'db.coll.remove ({_ id: {$ type: 7}})' удалить только ObjectId http://docs.mongodb.org/manual/reference/ оператор/запрос/тип /. Возможно, вы ошибаетесь. С вашими документами ничего не удаляется, потому что они не являются «реальными» 'ObjectId', но они являются' string' – Barno

+0

С вашими документами '{_id:" xxxx "} {_id:" yyyy "} {_id:" ObjectId (zzz) "} {_id:" ObjectId (xxxssssx) "}' ничего не удаляется. Затем вам нужно использовать '$ regex' – Barno

0

Для удаления объекта вы должны написать в новом ObjectId так ниже запрос удаляется только данный идентификатор объекта

db.collectioName.remove({"_id":new ObjectId("xxxssssx")}) 

или просто попробовать этот

db.collectioName.remove({"_id": ObjectId("xxxssssx")}) 
0

Как вы не можете обновить идентификатор How update the _id of one MongoDB Document? Вы должны удалить ваши документы и вставьте их снова в качестве кода ниже.

db.test.find().forEach(function(item) 
{ 
    if(typeof item._id == 'object') 
    {     
     var id = item._id.toString().replace('ObjectId(', '').replace(')', '');    
     db.test.remove({'_id': item._id}); 

     item._id = id; 
     db.test.insert(item); 
    } 
}); 
0

Вы можете воспользоваться оператором $type. type от Object Id является 7.

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

Это удаляет все документы, имеющие _id поля, представленные в виде Object Ids.

Смежные вопросы