Удалить с помощью _id в консоли MongoDB

138

Как в консоли 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

Ответы:

273

Очень близко. Это будет работать:

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

т.е. вам не нужен новый для ObjectId.

Кроме того , обратите внимание , что в некоторых водителей / инструментов, remove()теперь осуждается и deleteOneили deleteManyвместо них следует использовать.

Ник Коттрелл
источник
4
он также будет работать без кавычек вокруг _id db.test_users.remove ({_id: ObjectId ("4d512b45cc9374271b02ec4f")});
alfonsodev 04
Я пробовал это: TimeAndSpace.remove ({"_id": ObjectId ("8Bd2dZ778LXejYNrL")}); ... и я получил: «Uncaught ReferenceError: ObjectId не определен в <anonymous>: 2:13»
Б. Клей Шеннон,
@BClay Идентификатор объекта ожидает шестнадцатеричный ввод (возможно, также в нижнем регистре), поэтому он не работает с символами X и Z среди других.
Ник Коттрелл,
2
Это нелепо.
Guy
Если _idполе не генерируется автоматически (т.е. не ObjectId, а String), Вы можете просто записать значение из _idпод кавычки: db.your.database.remove({"_id": "your value"}).
Aleksandar
16

Ответ заключается в том, что веб-консоль / оболочка на mongodb.org ведет себя иначе, а не так, как я ожидал. Установленная дома версия работала без проблем, т.е. автоматически сгенерированный _id в веб-оболочке был сохранен следующим образом:

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

Та же самая домашняя настройка документа и автоматически сгенерированный _id были сохранены следующим образом:

"_id" : ObjectId("4d5192665777000000005490")

Запросы против последнего работали без проблем.

Опечатка Джонсон
источник
1
Вы уверены, что они сохранены в документе BSON по-другому? Эти различия выглядят так, будто клиент просто по-другому форматирует вывод.
Ник Коттрелл,
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")}});
Дмитрий
Да, я только что обновил вопрос, спасибо, я пробовал оба, и ни одна из них не работает. Может быть, это потому, что вы не можете удалить субсвойство?
Typo Johnson
при использовании этого способа возвращается «unknown operator: $ oid»
Арман Ортега,
13

Если вы хотите удалить по списку идентификаторов, это отлично работает.

db.CollectionName.remove({
    "_id": {
        $in: [
            ObjectId("0930292929292929292929"),
            ObjectId("0920292929292929292929")
        ]
     }
}) 
mjwrazor
источник
6

У вас есть несколько узлов mongodb в наборе реплик?

Я обнаружил (я использую оболочку Robomongo gui mongo, думаю, то же самое применимо и в других случаях), что правильный синтаксис удаления, т.е.

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

... не работает, если вы не подключены к основному узлу набора реплик.

Anentropic
источник
4

Я только что столкнулся с этим, и этот вариант сработал для меня:

db.foo.remove({**_id**: new ObjectId("4f872685a64eed5a980ca536")})
Кара
источник
4

сначала получите функцию ObjectID из объекта mongodb ObjectId = require (mongodb) .ObjectID;

тогда вы можете вызвать _id с функцией удаления

"_id": ObjectId ("4d5192665777000000005490")

С.А. Хан
источник
2

Несмотря на то, что этот пост устарел, collection.remove устарел! collection.delete_oneследует использовать вместо этого!

Более подробную информацию можно найти здесь, в разделе #remove.

Юваль Мешорер
источник
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.

Готово.

помет
источник