web-dev-qa-db-fra.com

Supprimer par _id dans la console MongoDB

Dans la console MongoDB, comment puis-je supprimer un enregistrement par ID? Voici ma collection:

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

Et voici les commandes que j'ai essayées qui ne fonctionnent pas:

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")});

Supprimer par nom fonctionne:

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

Ceci est dans le navigateur Shell à mongodb.org si cela fait une différence

Merci

115
Typo Johnson

Très proche. Cela fonctionnera:

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

c'est-à-dire que vous n'avez pas besoin d'un nouveau pour l'ObjectId.

238
Nic Cottrell

La réponse est que la console Web/Shell de mongodb.org se comporte différemment et ne correspond pas à mes attentes. Une version installée à la maison a parfaitement fonctionné, c’est-à-dire; le _id généré automatiquement sur le Web Shell a été enregistré comme ceci:

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

La même configuration de document à la maison et l'ID généré automatiquement ont été enregistrés comme suit:

"_id" : ObjectId("4d5192665777000000005490")

Les requêtes ont fonctionné contre ce dernier sans problème.

16
Typo Johnson

Eh bien, le _id est un objet dans votre exemple, il vous suffit donc de passer un objet

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

Cela devrait marcher

Edit: Ajout du paren de fin pour s’assurer qu’il a été compilé.

12
Dmitri

Si vous souhaitez supprimer une liste d'identifiants, cela fonctionne très bien. 

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

Je viens de tomber sur moi-même et cette variation a fonctionné pour moi:

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

commencez par obtenir la fonction ObjectID de mongodb ObjectId = require (mongodb) .ObjectID;

alors vous pouvez appeler le _id avec la fonction de suppression

"_id": ObjectId ("4d5192665777000000005490")

3
SA Khan

Avez-vous plusieurs nœuds mongodb dans un jeu de réplicas?

J'ai trouvé (j'utilise via Robomongo gui mongo Shell, la même chose s'applique dans d'autres cas) que la syntaxe de suppression correcte, c'est-à-dire.

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

... ne fonctionne que si vous êtes connecté au nœud primary du jeu de réplicas.

2
Anentropic

Même si cette publication est obsolète, collection est obsolète! collection.delete_one devrait être utilisé à la place!

Plus d'informations peuvent être trouvées ici sous #remove

0
Yuval Meshorer

Solution et exemple:

1- C:\MongoDB\Server\3.2\bin> Mongo (ne lancez pas encore de commande car vous n'êtes pas encore connecté à une base de données, vous êtes uniquement connecté au serveur de base de données mongodb).

2- 

montrer dbs base de données analytics 0.000GB 0,000GB local test_database 0.000GB

3- 

utilisez test_database basculé sur db test_database

4-

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

vous voyez maintenant WriteResult ({"nRemoved": 1}) est égal à 1 et non à 0.

Terminé.

0
Dung