在 MongoDB 控制台中删除 by _ id

在 MongoDB 控制台中,如何通过 id 删除记录:

[
{
"_id" : { "$oid" : "4d512b45cc9374271b02ec4f" },
"name" : "Gazza"
},
{
"_id" : { "$oid" : "4d513345cc9374271b02ec6c" },
"name" : "Dave",
"adminOf" : { },
"email" : "email@email.com"
}
]

以下是我尝试过但无法运行的命令:

db.test_users.remove( {"_id":{"$oid":new ObjectId("4d512b45cc9374271b02ec4f")}});
db.test_users.remove( {"_id":{"$oid":"4d513345cc9374271b02ec6c"}});
db.test_users.remove( {"_id":"4d512b45cc9374271b02ec4f"});
db.test_users.remove( {"_id":new ObjectId("4d512b45cc9374271b02ec4f")});

按名称移除可行:

db.test_users.remove( {"name":"Gazza"});

这是在浏览器外壳在 MonGodb.org,如果这有什么不同

谢谢

236709 次浏览

在您的示例中,_ id 是一个对象,所以您只需要传递一个对象

'db.test_users.remove({"_id": { "$oid" : "4d513345cc9374271b02ec6c" }})'

这个应该可以

编辑: 添加了尾随括号,以确保它已编译。

答案是,mongodb.org 上的 Web 控制台/shell 的行为与我预期的不同。在家里安装的版本可以很好地工作,没有问题,例如,web shell 上的 auto Generated _ id 保存如下:

"_id" : { "$oid" : "4d512b45cc9374271b02ec4f" },

在家里安装相同的文档设置,自动生成的 _ id 保存如下:

"_id" : ObjectId("4d5192665777000000005490")

对后者的查询没有问题。

我自己也碰到过这种情况,这种变化对我很有效:

db.foo.remove({**_id**: new ObjectId("4f872685a64eed5a980ca536")})

很接近了,这个可以:

db.test_users.deleteOne( {"_id": ObjectId("4d512b45cc9374271b02ec4f")});

也就是说,ObjectId 不需要 新的

另外,请注意,在一些驱动程序/工具中,现在不推荐使用 remove(),而应该使用 deleteOnedeleteMany

解决方案和例子:

1-C: MongoDB Server 3.2 bin > mongo (不要发出命令,因为您还没有连接到任何数据库,您只连接到数据库服务器 mongob)。

2 -

给 DBS 看看 Analytics _ database 0.000 GB 本地0.000 GB Test _ database 0.000 GB

3 -

使用 test _ database 切换到 db test _ database

4 -

Remove ({“ _ id”: ObjectId (“5694a3590f6d451c1500002e”)} ,1) ; WriteResult ({“ nRemoved”: 1})

现在您可以看到 WriteResult ({“ nRemoved”: 1})是1而不是0。

成交。

如果您想通过一个 ID 列表来删除,这个工作非常好。

db.CollectionName.remove({
"_id": {
$in: [
ObjectId("0930292929292929292929"),
ObjectId("0920292929292929292929")
]
}
})

首先从 mongodb 获取 ObjectID 函数 ObjectId = demand (mongodb)

然后可以使用 delete 函数调用 _ id

“ _ id”: ObjectId (“4d51926657700000005490”)

在一个复制集中是否有多个 mongodb 节点?

我发现(我使用的是 Robomongo gui mongo shell,我想同样适用于其他情况)正确的移除语法,即。

db.test_users.remove({"_id": ObjectId("4d512b45cc9374271b02ec4f")})

... 除非连接到复制集的 初选节点,否则无法工作。

即使这个帖子是过时的,集合。不推荐删除! collection.delete_one应该被用来代替!

更多信息可以找到 在这里下面 # 删除

假设我们有这个虚拟的集合:

{ "_id" : ObjectId("5ea53fedaa79db20d4e14284"), "item" : "planner", "qty" : 75 }

简单使用:

db.inventory.deleteOne({ _id: ObjectId("5ea53fedaa79db20d4e14284") })

作为回应,它将被删除:

{ "acknowledged" : true, "deletedCount" : 1 }

就是这样。

db.collection("collection_name").deleteOne({_id:ObjectId("4d513345cc9374271b02ec6c")})
db.getCollection("test_users").deleteOne({_id: new ObjectId("4d512b45cc9374271b02ec4f")})

归属: 公平地说,这是 GUI 客户端使用的语法,“俄罗斯”客户端。我的是一个潜伏的重复原因,由一个坏的“颠倒”w/o _ id。它只在添加唯一索引时显示。

有一个新的语法,不需要传递关键字对象 Id。像这样传递就可以了:

db.orders.remove({"_id":"62514d42f5aec503b2e0f2a9"})

以这种方式执行 move ()方法

db.student.remove({ "_id" : ObjectId("627f593641bcd9e215bc949d")})
OUTPUT : WriteResult({ "nRemoved" : 1 })

enter image description here