【发布时间】:2015-01-16 14:30:36
【问题描述】:
在我的收藏中,我的文档很少,其中一些将 _id 字段作为字符串,而其他一些作为 ObjectId 类型
{_id:"xxxx"}
{_id:"yyyy"}
{_id:"ObjectId(zzz)"}
{_id:"ObjectId(xxxssssx)"}
我想删除 _id 字段类型 ObjectId(这里是最后一个文档)
有什么解决办法吗?
【问题讨论】:
标签: mongodb mongodb-query
在我的收藏中,我的文档很少,其中一些将 _id 字段作为字符串,而其他一些作为 ObjectId 类型
{_id:"xxxx"}
{_id:"yyyy"}
{_id:"ObjectId(zzz)"}
{_id:"ObjectId(xxxssssx)"}
我想删除 _id 字段类型 ObjectId(这里是最后一个文档)
有什么解决办法吗?
【问题讨论】:
标签: mongodb mongodb-query
如果您的文档有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}}) 时,集合中的所有文档都被删除了,不过我有备份:)
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
要删除对象,您应该在新的 ObjectId 中写入,因此下面的查询仅删除给定的对象 ID
db.collectioName.remove({"_id":new ObjectId("xxxssssx")})
或者干脆试试这个
db.collectioName.remove({"_id": ObjectId("xxxssssx")})
【讨论】:
您可以使用$type 运算符。 Object Id 的 type 是 7。
db.collection.remove({"_id":{$type:7}})
这将删除所有具有以Object Ids 表示的_id 字段的文档。
【讨论】:
因为您无法更新 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);
}
});
【讨论】: