2017-06-14 6 views
0

Ich versuche, einen eindeutigen Index für meine Sammlung mit zusammengesetzten Schlüsseln zu erstellen, aber einige Dokumente haben möglicherweise null in den Feldern des Index. Gehen durch die documentation es scheint, ich sollte es mit partialFilterExpression tun können.Versuch, einen zusammengesetzten eindeutigen Index mit partialFilterExpression zu erstellen

Ich habe versucht, es wie folgt:

db.collection.createIndex( 
{ a: 1, b: 1, c: 1 }, 
{ 
    "background":true, 
    "unique": true, 
    "partialFilterExpression": { 
    "a": { "$exists": true }, 
    "b": { "$exists": true }, 
    "c": { "$exists": true } 
    } 
}) 

aber das gab mir die folgende Fehlermeldung:

exception: E11000 duplicate key error collection: schema.collection index: a_1_b_1_c_1 dup key: { : null, : null, : null }

Ich habe sogar versucht, die Teilfilterkriterien dies zu ändern:

db.collection.createIndex(
    { a: 1, b: 1, c: 1 }, 
    { 
    "background":true, 
    "unique": true, 
    "partialFilterExpression": { 
     "a": { "$exists": true, "$ne": null }, 
     "b": { "$exists": true, "$ne": null }, 
     "c": { "$exists": true, "$ne": null } 
    } 
    } 
) 

Aber immer noch den gleichen Fehler zurückgegeben.

Habe ich den Gebrauch missverstanden oder verwende ihn falsch?

+0

Darüber hinaus versuchen Sie * das Rad neu zu erfinden *. MongoDB hat eine ["spärliche Indizes"] (https: // docs.mongodb.com/manual/core/index-sparse/), die das tut, was Sie wollen, bereits 'db.collection.createIndex ({a: 1, b: 1, c: 1}, {" background ": true , "unique": true, "sparse": true}). "Wie in der Dokumentation erwähnt, können Sie mit der neueren Option" mehr tun ", das Standardverhalten passt jedoch in diesen speziellen Fall. –

+0

Eigentlich passt es nicht zu meinem Ich habe einige Dokumente, in denen * a * vorhanden ist, aber * b * oder * c * sind nicht.In diesem Fall, wenn ich versuche, den Sparse-Index zu erstellen, scheitert es mit dem doppelten Index '{a: something, b: null, c: null} '. Deshalb habe ich mich für dieses spezielle Feature entschieden, weil ich die Validierung nur dann brauchte, wenn alle Drei waren anwesend. –

Antwort

0

Nur herausgefunden, was mein Problem war. Die Version von meinem Monogo ist 3.0.12 und PartialFilterExpression wurde in Version 3.2 eingeführt

Verwandte Themen