MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Erstellen Sie _id für Unterdokumente auf mongoimport --jsonArray

Nein.

Um keine ObjectId zu generieren, aber Sie können eine ObjectId in JSON mit der folgenden Notation einfügen:

{ "test" : { "$oid" : "5519e8ac996ef7f4636bfaec" } }

Dies würde ein Feld namens test erstellen mit dem Wert ObjectId("5519e8ac996ef7f4636bfaec") . Der Wert des Schlüssels $oid muss eine gültige ObjectId sein.

Ja, das brauchen Sie, um die ObjectId-Werte zu generieren. Sie könnten entweder ein kleines Skript schreiben, z. B. mit dem Python-Treiber, um den Import durchzuführen und ObjectIds als Teil davon zu generieren, oder mongoimport verwenden und dann die Sammlung scannen und jedes Unterdokument mit einer ObjectId aktualisieren:

> db.test.find()
{ "_id" : ObjectId("5519e8ac996ef7f4636bfaec"), "a" : [ { "x" : 1 }, { "y" : 2 } ] } 
> db.test.find().forEach(function(doc) {
    for (var i = 0; i < doc.a.length; i++) {
        doc.a[i]._id = ObjectId()
    }
    db.test.update({ "_id" : doc._id }, doc)
} )

Beachten Sie dies, es sei denn, es gibt einen bestimmten Grund, eine _id/ObjectId in einem Unterdokument zu haben, wie die _id ein Verweis auf ein anderes Dokument ist, ist es weder notwendig noch wünschenswert, jedem Unterdokument eine ObjectId zuzuweisen.