【问题标题】:mongoimport _id is not an ObjectIdmongoimport _id 不是 ObjectId
【发布时间】:2018-12-28 14:42:58
【问题描述】:

我在 Windows 10 上使用 MongoDB v3.6.4

我有一个类似的 JSON:

[ {"_id": "5a68fdc3615eda645bc6bdec", "name": "Alfio"}, ... ]

我用以下方式导入它:

mongoimport --db <mydb> --collection <mycollection> --file <myfile> --jsonArray

我在我的数据库中的正确位置获取文档。但是 _id 是一个纯字符串。

我可以做各种查询,除了那些涉及 _id 作为搜索参数的查询,Model.findById() 也不起作用(它不接受一个字符串,甚至不是 ObjectId)。

ID 看起来像普通字符串 (_id: "5a68fdc3615eda645bc6bdec"),而在我的其他集合中,ID 看起来像对象 (_id: ObjectId("5a68fdc3615eda645bc6bdec"))。

为什么 import 语句在没有分配 ObjectId(s) 而不是纯字符串的情况下导入了所有内容?

为什么我什至无法使用以下内容进行查询?

Model.findOne({ _id: '5a68fdc3615eda645bc6bdec'})

如何解决这个问题?

提前致谢

【问题讨论】:

    标签: json database mongodb


    【解决方案1】:

    在导入第二个集合时尝试使用它,那么两个集合都将具有对象 id 而不是 _id

    { 
     "_id" : {"$oid":"5a68fdc3615eda645bc6bdec"}
    
    }
    

    【讨论】:

    • 我不明白...我到底要做什么?
    • 把你的jsonarray修改成[ {"_id": {"$oid":"5a68fdc3615eda645bc6bdec"}, "name": "Alfio"}, ... ]
    • 还有什么办法吗?
    • 否则你必须在导入后像db.Test.find().forEach( function(myDoc) { var id = new ObjectId(myDoc._id); db.Test.remove(myDoc) myDoc._id=id; db.Test.save(myDoc) } ); 一样运行自定义查询
    • 无论如何,您的第一个建议效果很好。感谢您的帮助!
    猜你喜欢
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2021-04-06
    • 2016-11-06
    • 2015-06-03
    相关资源
    最近更新 更多