在MongoDB控制台中按_id删除


137

在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的浏览器外壳中

谢谢


在添加回调之前,没有一种解决方案对我有用:db.test_users.remove({“ _id”:'4d512b45cc9374271b02ec4f'},function(err,data){});
rttmax

Answers:


272

很接近。这将起作用:

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

也就是说,您不需要ObjectId 的新名称

另外,请注意,在某些驱动程序/工具中,remove()现在已弃用,deleteOnedeleteMany应该改而使用。


4
_id db.test_users.remove({_id:ObjectId(“ 4d512b45cc9374271b02ec4f”)})周围也没有引号也可以使用
alfonsodev 2014年

我试过了:TimeAndSpace.remove({“ _id”:ObjectId(“ 8Bd2dZ778LXejYNrL”)}); ...而我得到了“未捕获的ReferenceError:未在<anonymous>:2:13定义ObjectId”
B. Clay Shannon

@BClay对象ID需要十六进制输入(可能也为小写),因此X,Z字符及其他字符均失败。
尼克·科特雷尔

2
这是_reidiculous。
Guy 2016年

如果该_id字段不是自动生成的(即它不是一个ObjectId,而是一个字符串),则可以只写下_id引号的值:db.your.database.remove({"_id": "your value"})
Aleksandar

16

答案是,mongodb.org上的Web控制台/外壳的行为与我预期的不同。在家中安装的版本可以完美运行而不会出现问题。在web shell上自动生成的_id保存如下:

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

在家保存相同的文档设置并自动生成的_id像这样保存:

"_id" : ObjectId("4d5192665777000000005490")

查询对后者毫无问题。


1
您确定它们在文档BSON中的保存方式有所不同吗?这些差异似乎是客户端只是以不同的格式格式化输出。
Nic Cottrell,2015年

13

好吧,_id在您的示例中是一个对象,因此您只需要传递一个对象

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

这应该工作

编辑:添加尾随括号以确保其已编译。


我也尝试过也没有删除记录:db.test_users.remove({“ _id”:{“ $ oid”:“ 4d513345cc9374271b02ec6c”}})); ps:更新了问题以显示这一点
Typo Johnson

在您的问题中,您说您尝试过此操作:db.test_users.remove({“ _id”:{“ $ oid”:new ObjectId(“ 4d512b45cc9374271b02ec4f”)}});;
德米特里(Dmitri)

是的,我刚刚更新了问题,谢谢,我已经尝试了两个,但是都没有用。也许是因为您无法删除子属性?
Typo Johnson,

使用这种方式返回“未知运算符:$ oid”
Arman Ortega 2015年

13

如果您想删除ID列表,则效果很好。

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

6

副本集中是否有多个mongodb节点?

我发现(我通过Robomongo gui mongo shell使用,我猜在其他情况下也是如此)正确的删除语法,即

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

...除非您连接到副本集的节点,否则它不起作用。


4

我自己碰到了这个变化,这种变化对我有用:

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

4

首先从mongodb获取ObjectID函数。ObjectId = require(mongodb).ObjectID;

然后您可以使用delete函数调用_id

“ _id”:ObjectId(“ 4d5192665777000000005490”)



1

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

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

只需使用:

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

它将作为响应被删除:

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

而已。


0

解决方案和示例:

1- C:\ MongoDB \ Server \ 3.2 \ bin> mongo(由于尚未连接到任何数据库,所以仅发出数据库服务器mongodb的命令,因此不发出命令)。

2

显示dbs analytics_database 0.000GB本地0.000GB test_database 0.000GB

3

使用test_database切换到db test_database

4

db.Collection.remove({“ _ id”:ObjectId(“ 5694a3590f6d451c1500002e”)},1);;WriteResult({“ nRemoved”:1})

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

做完了

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.