我正在尝试在内存mongo数据库中填充测试。
我正在使用mongo-java-driver 2.13.3
使用https://docs.mongodb.com/manual/reference/method/db.eval/我可以将javascript代码运行到内存数据库中。
将mongoexport
与--out output.json
标志一起使用我将以extended json格式获取所需的所有文档。
然后我用db.myCollection.insert()
包装这些json文档并尝试使用db.eval
插入我的数据库。
但由于这些文件扩展了json格式,我收到以下错误:
com.mongodb.CommandFailureException: { "serverUsed" : "localhost:12345" , "errmsg" : "exception: field names cannot start with $ [$oid] at src/mongo/shell/collection.js:147" , "code" : 16722 , "ok" : 0.0}
我想知道是否有办法解决这个问题,或者我是否应该采用其他方法来实现这一目标。
这是我要插入的示例:
db.keywords.insert({"_id":{"$oid":"53cd13a4e4b0d5282d586abf"},"name":"musculación","categoryId":{"$oid":"54180551d98ed9a5334110b3"},"photo":null,"created":{"$date":"2014-07-21T13:20:36.056Z"},"updated":{"$date":"2016-09-27T16:17:36.692Z"}});
答案 0 :(得分:0)
我不确定语法,但你的错误是mongo抱怨试图插入'$'保留字符字段。
我尝试使用您的文档插入并出现同样的错误:
> db.keywords.insert({
... "_id": {
... "$oid": "53cd13a4e4b0d5282d586abf"
... },
... "name": "musculación",
... "categoryId": {
... "$oid": "54180551d98ed9a5334110b3"
... },
... "photo": null,
... "created": {
... "$date": "2014-07-21T13:20:36.056Z"
... },
... "updated": {
... "$date":"2016-09-27T16:17:36.692Z"
... }
... })
2016-11-17T10:13:18.263-0500 E QUERY [thread1] Error: field names cannot start with $ [$oid] :
DBCollection.prototype._validateForStorage@src/mongo/shell/collection.js:185:1
DBCollection.prototype._validateForStorage@src/mongo/shell/collection.js:189:13
Bulk/this.insert@src/mongo/shell/bulk_api.js:646:9
DBCollection.prototype.insert@src/mongo/shell/collection.js:271:13
@(shell):1:1
如果您修改语法,它显然会起作用 - 我不知道这对Java驱动程序是否有效,但你可以尝试一下:
db.keywords.insert({
"_id": ObjectId("53cd13a4e4b0d5282d586abf"),
"name": "musculación",
"categoryId": ObjectId("54180551d98ed9a5334110b3"),
"photo": null,
"created": ISODate("2014-07-21T13:20:36.056Z"),
"updated": ISODate("2016-09-27T16:17:36.692Z")
});