W konsoli MongoDB jak mogę usunąć rekord według id? Oto moja kolekcja:
[
{
"_id" : { "$oid" : "4d512b45cc9374271b02ec4f" },
"name" : "Gazza"
},
{
"_id" : { "$oid" : "4d513345cc9374271b02ec6c" },
"name" : "Dave",
"adminOf" : { },
"email" : "[email protected]"
}
]
A oto polecenia, które wypróbowałem, ale nie działają:
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")});
Usuwanie według nazwy działa:
db.test_users.remove( {"name":"Gazza"});
To jest w powłoce przeglądarki na mongodb.org, jeśli ma to jakiekolwiek znaczenie
Dzięki
Odpowiedzi:
Bardzo blisko. To zadziała:
db.test_users.deleteOne( {"_id": ObjectId("4d512b45cc9374271b02ec4f")});
tj. nie potrzebujesz nowego dla ObjectId.
Należy również zauważyć, że w niektórych sterownikach / narzędziach
remove()
jest teraz przestarzały ideleteOne
lubdeleteMany
powinien być używany zamiast niego.źródło
_id
pole nie jest generowany automatycznie (czyli nie jest to ObjectId, ale String), można po prostu napisać wartość Instrumentu_id
pod cudzysłowie:db.your.database.remove({"_id": "your value"})
.Odpowiedź jest taka, że konsola / powłoka sieciowa na mongodb.org zachowuje się inaczej i nie tak, jak się spodziewałem. Zainstalowana wersja w domu działała doskonale bez problemu tj; automatycznie wygenerowany identyfikator _id w powłoce internetowej został zapisany w następujący sposób:
"_id" : { "$oid" : "4d512b45cc9374271b02ec4f" },
Ta sama konfiguracja dokumentu w domu i automatycznie wygenerowany identyfikator _id zostały zapisane w następujący sposób:
"_id" : ObjectId("4d5192665777000000005490")
Zapytania działały przeciwko temu drugiemu bez problemu.
źródło
Cóż, w twoim przykładzie _id jest obiektem, więc wystarczy przekazać obiekt
'db.test_users.remove({"_id": { "$oid" : "4d513345cc9374271b02ec6c" }})'
To powinno działać
Edycja: Dodano końcowy paren, aby upewnić się, że został skompilowany.
źródło
Jeśli chcesz usunąć za pomocą listy identyfikatorów, działa to świetnie.
db.CollectionName.remove({ "_id": { $in: [ ObjectId("0930292929292929292929"), ObjectId("0920292929292929292929") ] } })
źródło
Czy w zestawie replik masz wiele węzłów mongodb?
Znalazłem (używam przez Robomongo gui mongo shell, chyba to samo dotyczy innych przypadków), że poprawna składnia usuwania, tj.
db.test_users.remove({"_id": ObjectId("4d512b45cc9374271b02ec4f")})
... nie działa, chyba że jesteś połączony z głównym węzłem zestawu replik.
źródło
Właśnie wpadłem na to sam i ta odmiana zadziałała dla mnie:
db.foo.remove({**_id**: new ObjectId("4f872685a64eed5a980ca536")})
źródło
najpierw pobierz funkcję ObjectID z mongodb ObjectId = require (mongodb) .ObjectID;
wtedy możesz wywołać _id za pomocą funkcji usuwania
"_id": ObjectId ("4d5192665777000000005490")
źródło
Mimo że ten post jest nieaktualny, collection.remove jest przestarzała!
collection.delete_one
należy użyć zamiast tego!Więcej informacji można znaleźć tutaj, pod hasłem #remove
źródło
Załóżmy, że mamy tę kolekcję manekinów:
{ "_id" : ObjectId("5ea53fedaa79db20d4e14284"), "item" : "planner", "qty" : 75 }
po prostu użyj:
db.inventory.deleteOne({ _id: ObjectId("5ea53fedaa79db20d4e14284") })
zostanie usunięty jako odpowiedź:
{ "acknowledged" : true, "deletedCount" : 1 }
Otóż to.
źródło
Rozwiązanie i przykład:
1- C: \ MongoDB \ Server \ 3.2 \ bin> mongo (nie wydawaj jeszcze komendy, ponieważ nie jesteś jeszcze połączony z żadną bazą danych, jesteś połączony tylko z serwerem bazy danych mongodb).
2-
3-
4-
teraz widzisz WriteResult ({"nRemoved": 1}) wynosi 1, a nie 0.
Gotowe.
źródło
db.collection("collection_name").deleteOne({_id:ObjectID("4d513345cc9374271b02ec6c")})
źródło