为java测试填充mongo集合

时间:2016-11-17 15:01:45

标签: javascript java json mongodb

我正在尝试在内存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"}});

1 个答案:

答案 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")
});