【问题标题】:Delete all docs of type ObjectId as _id field in mongodb在 mongodb 中删除所有 ObjectId 类型的文档作为 _id 字段
【发布时间】:2015-01-16 14:30:36
【问题描述】:

在我的收藏中,我的文档很少,其中一些将 _id 字段作为字符串,而其他一些作为 ObjectId 类型

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

我想删除 _id 字段类型 ObjectId(这里是最后一个文档)

有什么解决办法吗?

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案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)"})
    

    【讨论】:

    • 当我运行db.coll.remove({_id:{$type:7}}) 时,集合中的所有文档都被删除了,不过我有备份:)
    • @iAmME with db.coll.remove({_id:{$type:7}}) remove Only ObjectId docs.mongodb.org/manual/reference/operator/query/type/.Maybe 你写错了。对于您的文档,不会删除任何内容,因为它们不是“真实的”ObjectId,但它们是 string
    • 使用您的文档{_id:"xxxx"} {_id:"yyyy"} {_id:"ObjectId(zzz)"} {_id:"ObjectId(xxxssssx)"},不会删除任何内容。然后你必须使用$regex
    【解决方案2】:

    要删除对象,您应该在新的 ObjectId 中写入,因此下面的查询仅删除给定的对象 ID

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

    或者干脆试试这个

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

    【讨论】:

      【解决方案3】:

      您可以使用$type 运算符。 Object Idtype7

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

      这将删除所有具有以Object Ids 表示的_id 字段的文档。

      【讨论】:

        【解决方案4】:

        因为您无法更新 id 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);
            }
        });
        

        【讨论】:

          猜你喜欢
          • 2013-07-07
          • 2018-01-22
          • 2021-01-06
          • 1970-01-01
          • 2015-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多