2017-09-28 3 views
0

Ich versuche, eine Mongo-Sammlung, die Validatoren hat, zu speichern. Diese Validierer haben reguläre Ausdrücke, die auf der Oberfläche, es sieht aus wie mongorestore kann nicht importieren: Zunächst erstelle ich meine Sammlung:Kann mongorestore mit Regex-Validatoren umgehen?

use test 
db.users.drop() 
db.createCollection("users", {validator : { 
            name : { 
             $type : "string", 
             $regex : /^[A-z]*$/ 
            }, 
            } 
        }) 
// { "ok" : 1 } 
db.getCollectionInfos() 
// looks like it should... 
db.users.insertOne({"name": "[email protected]"}); 
// fails 
db.users.insertOne({"name": "Valid"}); 
// succeeds 
db.users.find() 
// { "_id" : ObjectId("59cd85d84f2803b08e9218ac"), "name" : "Valid" } 

Dann habe ich einen Dump laufen, das scheint in Ordnung:

/usr/bin/mongodump --host $MYHOST \ 
        --port $MYPORT \ 
        --db test \ 
        --gzip \ 
        --archive=test.mongodump.gz 

Dann wiederherstellen ein, die fehlschlägt:

/usr/bin/mongorestore --host $MYHOST \ 
         --port $MYPORT \ 
         --gzip \ 
         --archive=test.mongodump.gz 

Fehler:

2017-09-28T23:31:30.626+0000 preparing collections to restore from 
2017-09-28T23:31:30.691+0000 reading metadata for test.users from archive 'test.mongodump.gz' 
2017-09-28T23:31:30.692+0000 Failed: test.users: error parsing metadata from archive 'test.mongodump.gz': extended json in 'options': expected $regex field to have string value 

Ich habe über die Docs zu Mongdump und Mongorestore gegossen, aber nicht wirklich irgendwo hingekommen. Ich habe versucht --noOptionsRestore, gleichen Fehler.

Ich bin relativ neu in Mongo, so konnte ich nur einfach etwas fehlen ...

Antwort

0

Es stellt sich heraus, dass, wenn Sie einen $ regex haben, Sie muss auch $options, auch wenn $options = ''. Die Fehlermeldung weist darauf hin, aber sehr schlecht. Ändern der erstellen Anweisung aus:

db.createCollection("users", {validator : { 
            name : { 
             $type : "string", 
             $regex : /^[A-z]*$/ 
            }, 
            } 
        }) 

zu

db.createCollection("users", {validator : { 
            name : { 
             $type : "string", 
             $regex : /^[A-z]*$/, 
             $options: '' 
            }, 
            } 
        }) 

löst das Problem

Verwandte Themen