在 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 Id
的 type
是 7
。
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 字段的主要内容,如果未能解决你的问题,请参考以下文章