2016-05-08 5 views
1

Ich habe eine Mongodb-Sammlung mit einem Feld, das ich indexieren möchte. Es ist ein String-Feld mit dem Titel "Titel". Es gibt ungefähr 9 Millionen verschiedene Einträge und ich versuche nur, die Misten loszuwerden.Überprüfen Sie durch mongodb colletion für Werte in einem Feld zu groß zum Indexieren

Als ich versuchte, die Indizierung mit:

db.getCollection("review_metadata").createIndex({"title" : 1}) 

ich diesen Fehler:

db.getCollection("review_metadata").createIndex({"title" : 1})

{ 
     "createdCollectionAutomatically" : false, 
     "numIndexesBefore" : 2, 
     "ok" : 0, 
     "errmsg" : "Btree::insert: key too large to index, failing amazon_reviews.review_metadata.$title_1 1860 { : \"***Super Charger*** Ultra Slim 40W AC Power Adapter Cord for Samsung Notebook/UltraBook : NP300U1A, NP300U1A-A01US, NP305U1A, NP305U1A-A01US, NP305U1A...\" }", 
     "code" : 17282 
} 

So ist es eine Möglichkeit, durch alle Werte im Titelfeld zu suchen für Werte, die zu groß zum Indexieren wären?

+2

Mögliche Duplikat sein könnte: http://stackoverflow.com/questions/29577713/string-field-value-length-in-mongodb –

+1

Vereinbaren Sie, verwenden Sie eine Mindestlänge von 1012, um die anstößigen Dokumente zu finden. 'db.test.find ({title:/^. {1012,} $ /})'. – JohnnyHK

Antwort

1

Gemäß manaul gibt es ein 1024 Byte Limit im indizierten Feld. Wie Sie indizieren Textfeld gehen - text index eine gute Lösung

db.review_metadata.createIndex(
    { 
    title: "text", 
    otherFieldThatCouldBeIndexedToo: "text" 
    } 
) 
+0

Ich ging mit dieser Lösung, da ich gerade etwas ausprobiere und einfach/^ durch die Daten suchen muss. Vielen Dank. – Zeratas

Verwandte Themen