在 mongodb 中删除所有 ObjectId 类型的文档作为 _id 字段

Posted

技术标签:

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

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

_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)")

【讨论】:

当我运行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);
    
);

【讨论】:

以上是关于在 mongodb 中删除所有 ObjectId 类型的文档作为 _id 字段的主要内容,如果未能解决你的问题,请参考以下文章

使用更新 mongoDB 从 objectId 数组中删除

Mongodb $pull 执行从嵌套子数组中删除 ObjectId("... id") 。

从 mongodb 中的对象数组中删除 id

MongoDB unset 删除子项中的所有内容

在 MongoDB 中将 ObjectId 转换为 str

MongoDB Scala - 删除集合中的重复文档