sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur tar man bort _id i MongoDB och ersätter med ett annat fält som en primärnyckel?

I mongodb måste varje dokument vara unikt, så du behöver ett unikt fält för att användas som id. Om du inte tillhandahåller en, kommer mongodb att tillhandahålla en till dig automatiskt. Men om du vill ge anpassade ID av vilken anledning som helst (förbättra frågeprestanda är en av dem), kan du göra det manuellt. Här kommer mina förslag:

Om du infogar ett nytt dokument kan du manuellt ställa in _id-fältet som:

doc._id = "12312312" //(Or whichever function to generate id you have)
doc.save(...)

Men när du redan har ett dokument i databasen kan du inte ändra det längre. Vad du kan göra är att göra en kopia av dokumentet, spara ett nytt dokument med samma data och radera det gamla:

// Fetch the documents
docs = db.clients.find({})

docs.forEach((doc) => {
   //For each field you copy the values
   new_doc.field = doc.field
   new_doc._id = //YOUR ID FUNCTION 

   // insert the document, using the new _id
   db.clients.insert(new_doc)

   // remove the document with the old _id
   db.clients.remove({_id: doc._id})
}

Den här frågan liknar följande:

Hur uppdaterar _id för ett MongoDB-dokument?

Hoppas mitt svar var till hjälp



  1. Vad är det för fel med MongoDB-borttagningsfrågan med mongodb java för underarray av dokument?

  2. Redis Pub/Sub ServiceStack, avbryter tråden

  3. MongoDB-aggregation med $lookup inkluderar (eller projekterar) endast några fält att returnera från frågan

  4. Infoga json-filen i mongodb