在MongoDB中手动添加ObjectID(Rails/Mong.



我正在使用Rails 4.0和MongoDB(Mongoid),我有以下代码来创建文档:

    lines.each do |l|
    Insert.create(:position => 0, :content => l, :schema_id => Moped::BSON::ObjectId.from_string("52419d2f80a9b88bb9000002"))
    end

这工作正常,我在我的 Mongo 数据库中得到以下输出:

{
"_id": {
    "$oid": "5241ff1280a9b8f16e000057"
},
"position": "0",
"content": "blabla",
"schema_id": "52419d2f80a9b88bb9000002"

}

唯一的问题是,我想有一个"$oid":在实际schema_id之前,如下所示:

...
    "schema_id": {
    "$oid": "52419d2f80a9b88bb9000002"
}

我真的很困惑如何手动插入"$oid"后跟冒号......

如果你能帮助我,那就太好了...

提前感谢!!

你根本不应该有$oid,无论是在你的schema_id还是在_id中,这将使索引操作变得困难,或者不可能进入Mongodb。您可能$oid因为您可能会以某种方式将文档解析为 json 以插入数据库,无论如何,如果我是你,我会编写一个迁移来在数据库层中解决此问题,并修复代码以在持久之前不使用 JSON 版本。

我的怀疑就像亚瑟一样,我会尽力澄清。 您应该重新检查您的 Ruby 代码,并确保您没有以某种方式隐式地将对象 ID 串化到您没有放在问题中的某些 Ruby 代码中。

当我试图破译它时,你的问题让我感到困惑,当你尝试调试时,你可能会感到困惑。 这是因为您正在使用 Ruby,但向我们提供了既不是来自 Ruby 也不是来自 mongo shell 的 JSON 文档,这表明您正在尝试从与相关代码分开的上下文中进行调试。

我委婉地建议你遵循标准的Rails编写测试的做法。 请编写一个测试,通过插入文档并使用 Ruby 转储有问题的文档来重现您的问题。

最新更新