sql >> Database >  >> NoSQL >> MongoDB

Maak _id op subdocumenten op mongoimport --jsonArray

Nee.

Niet om een ​​ObjectId te genereren, maar u kunt een ObjectId in de JSON opnemen met de volgende notatie:

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

Dit zou een veld creëren met de naam test met waarde ObjectId("5519e8ac996ef7f4636bfaec") . De waarde van de sleutel $oid moet een geldige ObjectId zijn.

Ja, dat is wat je nodig hebt om de ObjectId-waarden te genereren. U kunt ofwel een klein script schrijven met bijvoorbeeld het Python-stuurprogramma om de import uit te voeren en ObjectId's als onderdeel ervan te genereren, of u kunt mongoimport gebruiken en vervolgens de verzameling scannen en elk subdocument bijwerken met een ObjectId:

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

Merk op dat, tenzij er een specifieke reden is om een ​​_id/ObjectId op een subdocument te hebben, zoals de _id een verwijzing naar een ander document is, is het niet nodig en ook niet wenselijk om op elk subdocument een ObjectId te plaatsen.




  1. onbevoegd db-vergrendelingstype:-1

  2. MongoDB-hostingopties nu de Heroku mLab-add-on wordt verwijderd

  3. Conversie van gegevenstype in MongoDB

  4. Redis-replicatie en redis-sharding (cluster) verschil