在mongoimport --jsonArray上的子文档上创建_id

时间:2015-03-30 19:42:36

标签: mongodb

我通过vb脚本从excel生成JSON。我使用mongoimport --jsonArray

将其导入mongodb

它在每个文档上创建一个objectId,但不在子文档上创建。什么是创造这些的最佳方式?是否有可能在monogoimport上有一些选项?或者我是否必须使用API​​来执行此操作?或者我可以在json中编写任何内容以使其在导入时生成一个?

1 个答案:

答案 0 :(得分:5)

  

是否有可能在monogoimport上有一些选项?

不。

  

我可以在json中编写任何内容以使其在导入时生成一个吗?

不生成ObjectId,但您可以使用以下表示法在JSON中包含ObjectId:

{ "test" : { "$oid" : "5519e8ac996ef7f4636bfaec" } }

这会创建一个名为test的字段,其值为ObjectId("5519e8ac996ef7f4636bfaec")。密钥$oid的值必须是有效的ObjectId。

  

我是否必须使用API​​来执行此操作?

是的,这是您生成ObjectId值所需要的。您可以使用例如Python驱动程序编写一个小脚本来执行导入并生成ObjectId作为其中的一部分,或者使用mongoimport然后扫描集合并使用ObjectId更新每个子文档:

> db.test.find()
{ "_id" : ObjectId("5519e8ac996ef7f4636bfaec"), "a" : [ { "x" : 1 }, { "y" : 2 } ] } 
> db.test.find().forEach(function(doc) {
    for (var i = 0; i < doc.a.length; i++) {
        doc.a[i]._id = ObjectId()
    }
    db.test.update({ "_id" : doc._id }, doc)
} )

请注意,除非在子文档中有一些_id / ObjectId的特定原因,例如_id是对另一个文档的引用,否则它既不必要也不可取每个子文档上都有一个ObjectId。