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

标签 mongodb

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

将它导入到 mongodb

它在每个文档上创建一个 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/

相关文章:

r - 在 R 中通过 SSH 连接到 MongoDB

node.js - 如何在 Google Cloud Platform 中部署现有的 NodeJS 应用程序

javascript - 使用 Javascript 从 MongoDB 返回中提取值。

mongodb - 将 $near 与 $maxDistance 和 $and 一起使用可以充当 MongoDB 中的过滤器吗?

node.js - Express:将文档嵌入现有文档中

node.js - 你如何更新 Node.js 中的一对多关系?

mongodb - 是否可以在 MongoDB 的单个事务中执行多个数据库操作?

mongodb aggregation : if value of two fields match, 将相应字典的另一个字段的值添加到新字段

mongodb - mongo-go-driver聚合查询总是返回 "Current": null

macos - Mongorestore - 打开的文件太多 - mac os x