Видаліть _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'}, функція (помилка, дані) {});
rttmax

Відповіді:


273

Дуже близько. Це спрацює:

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

тобто вам не потрібен новий для ObjectId.

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


4
він також працюватиме без лапок навколо _id db.test_users.remove ({_id: ObjectId ("4d512b45cc9374271b02ec4f")});
alfonsodev

Я спробував це: TimeAndSpace.remove ({"_id": ObjectId ("8Bd2dZ778LXejYNrL")}); ... і я зрозумів, "Uncaught ReferenceError: ObjectId не визначено в <анонімі>: 2: 13"
Б. Клей Шеннон,

@BClay Ідентифікатор об'єкта очікує шістнадцятковий вхід (можливо, також малий регістр), тому він не відповідає серед символів X, Z серед інших.
Нік Коттрелл

2
Це _помітно.
Хлопець

Якщо _idполе не генерується автоматично (тобто не ObjectId, а String), Ви можете просто записати значення з _idпід лапки: db.your.database.remove({"_id": "your value"}).
Олександр

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

таким чином повертає "невідомий оператор: $ oid"
Арман Ортега

13

Якщо ви хочете видалити список ідентифікаторів, це чудово працює.

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

6

Чи є в наборі реплік кілька вузлів mongodb?

Я виявив (я використовую через оболонку Robomongo gui mongo, я думаю, те саме стосується і в інших випадках), що правильний синтаксис видалення, тобто

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

... не працює, якщо ви не підключені до основного вузла набору реплік.


4

Я щойно наткнувся на це, і ця варіація спрацювала для мене:

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

4

спочатку отримайте функцію ObjectID від mongodb ObjectId = потреба (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 local 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}) - це не 0.

Зроблено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.