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



我通过vb脚本从excel生成了JSON。我使用mongoimport --jsonArray 将其导入mongodb

它在每个文档上创建一个objectId,而不是在子文档上。创建这些的最佳方法是什么?有可能在monoimport上添加一些选项吗?还是我必须使用API才能做到这一点?或者,我可以在json中写些什么来让它在导入时生成一个json吗?

有可能在monoimport上添加一些选项吗?

没有。

我可以在json中写些什么来让它在导入时生成一个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既没有必要也不可取。

最新更新