我有通过 vb 脚本从 excel 生成的 JSON。我使用 mongoimport --jsonArray
它在每个文档上创建一个 objectId,但不在子文档上创建。创建这些的最佳方法是什么?是否有可能在 monogoimport 上使用一些选项?还是我必须使用 API 才能做到这一点?或者有什么我可以写在我的 json 中以使其在导入时生成一个?
最佳答案
Is it possible with some option on monogoimport?
没有。
is there anything I can write in my json to make it generate one on import?
不生成 ObjectId,但您可以使用以下符号在 JSON 中包含 ObjectId:
{ "test" : { "$oid" : "5519e8ac996ef7f4636bfaec" } }
这将创建一个名为 test
的字段,其值为 ObjectId("5519e8ac996ef7f4636bfaec")
。键 $oid
的值需要是有效的 ObjectId。
do I have to use an API to do it?
是的,这就是生成 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 .
关于mongodb - 在 mongoimport --jsonArray 上的子文档上创建 _id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29354858/