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

Posted

技术标签:

【中文标题】在 mongoimport --jsonArray 的子文档上创建 _id【英文标题】:Create _id on subdocuments on mongoimport --jsonArray 【发布时间】:2015-06-03 23:29:44 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

mongoimport 是否有一些选项?

没有。

我可以在我的 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 既没有必要也不可取。

【讨论】:

非常好。我使用猫鼬,猫鼬在创建子文档时会生成一个_id。当您需要在子文档上执行 CRUD:s 时,这很好。谢谢

以上是关于在 mongoimport --jsonArray 的子文档上创建 _id的主要内容,如果未能解决你的问题,请参考以下文章

管道解压缩文件到mongoimport

mongoimport mongo导入Json的用法

使用 Javascript/Node.js 在代码中执行 mongoimport

可以从 Heroku 运行 mongoimport 吗?

使用 mongoimport 解析 JSON 失败

如何在远程服务器中进行 mongoimport