mongorestore 可以处理正则表达式验证器吗?
Can mongorestore handle regex validators?
我正在尝试 dump/restore 具有验证器的 mongo collection。这些验证器有正则表达式,从表面上看,mongorestore 似乎无法导入:
首先,我创建 collection:
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": "inv@lid"});
// fails
db.users.insertOne({"name": "Valid"});
// succeeds
db.users.find()
// { "_id" : ObjectId("59cd85d84f2803b08e9218ac"), "name" : "Valid" }
然后,我 运行 转储,看起来不错:
/usr/bin/mongodump --host $MYHOST \
--port $MYPORT \
--db test \
--gzip \
--archive=test.mongodump.gz
然后,还原失败:
/usr/bin/mongorestore --host $MYHOST \
--port $MYPORT \
--gzip \
--archive=test.mongodump.gz
错误:
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
我已经将文档倾注到 mongdump 和 mongorestore,但还没有真正取得进展。我试过 --noOptionsRestore
,同样的错误。
我对 mongo 比较陌生,所以我可能会遗漏一些简单的东西...
事实证明,如果你有一个$regex,你还需要$options
,即使$options = ''
。错误消息有点暗示这一点,但非常糟糕。从以下位置更改创建语句:
db.createCollection("users", {validator : {
name : {
$type : "string",
$regex : /^[A-z]*$/
},
}
})
到
db.createCollection("users", {validator : {
name : {
$type : "string",
$regex : /^[A-z]*$/,
$options: ''
},
}
})
解决问题
我正在尝试 dump/restore 具有验证器的 mongo collection。这些验证器有正则表达式,从表面上看,mongorestore 似乎无法导入: 首先,我创建 collection:
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": "inv@lid"});
// fails
db.users.insertOne({"name": "Valid"});
// succeeds
db.users.find()
// { "_id" : ObjectId("59cd85d84f2803b08e9218ac"), "name" : "Valid" }
然后,我 运行 转储,看起来不错:
/usr/bin/mongodump --host $MYHOST \
--port $MYPORT \
--db test \
--gzip \
--archive=test.mongodump.gz
然后,还原失败:
/usr/bin/mongorestore --host $MYHOST \
--port $MYPORT \
--gzip \
--archive=test.mongodump.gz
错误:
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
我已经将文档倾注到 mongdump 和 mongorestore,但还没有真正取得进展。我试过 --noOptionsRestore
,同样的错误。
我对 mongo 比较陌生,所以我可能会遗漏一些简单的东西...
事实证明,如果你有一个$regex,你还需要$options
,即使$options = ''
。错误消息有点暗示这一点,但非常糟糕。从以下位置更改创建语句:
db.createCollection("users", {validator : {
name : {
$type : "string",
$regex : /^[A-z]*$/
},
}
})
到
db.createCollection("users", {validator : {
name : {
$type : "string",
$regex : /^[A-z]*$/,
$options: ''
},
}
})
解决问题