Mam mongo db nazwie test
iw tym db dwie kolekcje collection1
i collection1_backup
. Jak wymienić zawartość collection1
na dane z collection1_backup
.mongo kopiowanie z jednej kolekcji do drugiej (na tej samej db)
Odpowiedz
Najlepszym sposobem, aby zrobić to (biorąc pod uwagę nazwę kolekcji kończy _backup
) jest ewentualnie mieć używany mongorestore: http://docs.mongodb.org/manual/reference/mongorestore/
Jednak w tym przypadku to zależy. Jeśli kolekcja jest unsharded można użyć renameCollection
(http://docs.mongodb.org/manual/reference/command/renameCollection/) lub można użyć bardziej ręczny sposób (w kodzie JavaScript):
db.collection1.drop(); // Drop entire other collection
db.collection1_backup.find().forEach(function(doc){
db.collection1.insert(doc); // start to replace
});
Są to najczęstsze sposoby na zrobienie tego.
przydatny również: wyeksportować do pliku json kolekcję
mongoexport --collection collection1_backup --out collection1.json
zaimportować kolekcji z pliku json
mongoimport --db test --collection collection1 --file collection1.json
importować jeden zbiór z pliku kopii zapasowej/zrzutu jeden potrzeby konwertowania * .bson złożyć do * .json za pomocą
bsondump collection1_backup.bson > collection1_backup.json
Używanie sterownika Java
Spróbuj poniżej jeden:
public void copyTo(String db,String sourceCollection,String destinationCollection,int limit) throws
UnknownHostException {
MongoClient mongo = new MongoClient("localhost", 27017);
DB database = mongo.getDB(db);
DBCollection collection = database.getCollection(sourceCollection);
DBCursor dbCursor = collection.find().limit(limit);
List<DBObject> list = dbCursor.toArray();
DBCollection destination = database.getCollection(destinationCollection);
destination.insert(list, WriteConcern.NORMAL); //WRITE CONCERN is based on your requirment.
}
Lepszy sposób byłoby użyć .toArray()
db.collection1.drop(); // Drop entire other collection
// creates an array which can be accessed from "data"
db.collection1_backup.find().toArray(function(err, data) {
// creates a collection and inserting the array at once
db.collection1.insert(data);
});
Można użyć prostego polecenia do tworzenia kopii zapasowych MongoDB Collection
db.sourceCollectionName.copyTo('targetCollectionName')
Twoja targetCollectionName musi być w trybie Single (") lub Double" (") Cytat
Uwaga:
Sposób db.collection.copyTo() stosuje wewnętrznie polecenia eval. Po uzyskaniu wyniku operacja db.collection.copyTo() pobiera globalną blokadę , która blokuje wszystkie inne operacje odczytu i zapisu, dopóki nie zakończy się operacja db.collection.copyTo() .
To nie działa z Sharded kolekcje, btw – oshaiken
- 1. Kopiowanie wartości z jednej kolumny do drugiej w tej samej tabeli
- 2. Jak wstawić rekord z jednej bazy danych mongo do drugiej?
- 3. Kopiowanie danych z jednej bazy danych do drugiej w Oracle
- 4. Kopiowanie danych blob z jednej tabeli do drugiej na MySQL
- 5. Kopiowanie php i mysql z jednej tabeli do drugiej
- 6. Wiele pól do tej samej kolumny DB
- 7. Prawidłowy sposób zrobienia odpowiedzi. Odnośnik z jednej strony do drugiej w tej samej witrynie
- 8. Jak mogę dodać elementy z jednej kolekcji, które nie istnieją w drugiej kolekcji do trzeciej kolekcji?
- 9. Kopiowanie zawartości jednej kolumny do drugiej w jQuery
- 10. Różne generyczne T w tej samej kolekcji
- 11. Kopiowanie elementów z jednej strony do drugiej w wielościeżce z VBA w programie Excel
- 12. MONGO DB Like Operator
- 13. WPF Multiple CollectionView z różnymi filtrami w tej samej kolekcji
- 14. TopShelf zainstalować wiele tej samej usługi na tej samej maszynie
- 15. Kopiowanie tabel z jednej bazy danych do drugiej w SQL Server
- 16. Mongo DB Invariant failure
- 17. Zrozumienie Mongo db wyjaśnić
- 18. W Meteor.js, w jaki sposób mam dwa projekty programistyczne korzystające z tej samej instancji Mongo?
- 19. Mongo DB $ lub zapytanie w PHP
- 20. Highcharts.js - wiele motywów na tej samej stronie?
- 21. Ładowanie danych z jednej tabeli Hive do drugiej z partycją
- 22. Jak przejść z jednej gałęzi do drugiej i zamówić?
- 23. Pytest używa tej samej oprawy dwa razy w jednej funkcji
- 24. Kopiowanie i wklejanie wierszy do tej samej tabeli SQL z różnymi wartościami
- 25. Kopiowanie pól ManyToMany z jednej instancji modelu na inną
- 26. Sortowanie jednej tablicy w tej samej kolejności co inna tablica
- 27. Jak korzystać z wielu $ splice na tej samej kolekcji z React Niezmienność Pomocnicy
- 28. Wyjątek hibernacji; znaleziono dwie reprezentacje tej samej kolekcji
- 29. Używanie wielu baz danych w tej samej aplikacji
- 30. Przenieś dane SQL z jednej tabeli do drugiej
Generalnie lepiej jest używać 'mongodump' i' mongorestore' podczas kopiowania kolekcji, ponieważ konwertowanie dokumentów do JSON iz powrotem może wpływać na [wierność typu danych] (http://docs.mongodb.org/manual)/administration/import-export/# data-type-fidelity). Istnieje kilka typów danych, które istnieją w BSON, które mogą mieć [inną reprezentację w JSON] (http://www.mongodb.org/display/DOCS/Mongo+Extended+JSON), gdzie nie ma ścisłego odpowiednika JSON. Użycie 'mongoimport' /' mongoexport' może być OK w zależności od twoich danych, ale jest to ważne zastrzeżenie, o którym musisz wiedzieć. – Stennie
@Stennie Należy również pamiętać, że robienie mongodump/mongorestore zachowa indeksy. Jeśli więc próbujesz zduplikować dokumenty między kolekcjami, przywrócenie nie będzie możliwe. Mongoexport i mongoimport powinny być używane, jeśli próbujesz skopiować dokumenty między kolekcjami. – ivandov
@ivand Można pominąć tworzenie indeksów (oprócz wymaganego indeksu '_id') za pomocą' mongorestore --noIndexRestore'. Zauważ, że 'mongorestore' (jak w MongoDB 3.4) zawiera tylko inserty; jeśli istnieje dokument z tym samym "_id", nie zostanie on zaktualizowany ani zastąpiony. Narzędzie 'mongoimport' obsługuje wersje upart (i 3.4, scala), ale działa z formatami tekstowymi zamiast natywnego formatu BSON MongoDB. 'mongodump' i' mongorestore' są nadal zalecanymi opcjami, jeśli chcesz odtworzyć dane (i opcjonalnie metadane kolekcji) identycznie między wdrożeniami MongoDB. – Stennie