在 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的主要内容,如果未能解决你的问题,请参考以下文章