在创建从Web界面获取的文档时,它并没有正确地对整数日期和其他类型进行类型转换。例如
{"_id": "<some_object_id>", "name": "hello", "age": "20", "dob": "1994-02-22"}
由于动态输入属性,因此无法预先判断其类型。我有什么方法可以从客户端输入它们,比如
{"_id": "<some_object_id>", "name": "hello", "age": "$int:20", "dob": "$date:1994-02-22"}
非常感谢任何帮助。
答案 0 :(得分:0)
由于您似乎关注来自表单(例如POST)的字符串,因此简单的答案是您将它们转换为Ruby。
如果该字段是您期望的数字,则将其转换为int。日期也是如此。
您的mongo驱动程序将正确解释这些并将它们存储为MongoDB集合中相应的BSON类型。反之亦然,当您阅读收集数据时,您将把它重新投射到您的原生类型中。
"1234".to_i
Date.strptime("{ 2014, 2, 22 }", "{ %Y, %m, %d }")
但那是Ruby的基本部分。
现在您可以执行类似伪建议的操作并存储您的信息,而不是本机类型,而是strings
带有某种形式的类型标记。但是,看,我只是没有看到你需要的观点
在某个阶段检测类型并应用标记
实际上你破坏了在集合中使用本机类型的所有好处。例如日期范围的查询和聚合以及值的基本求和。
虽然我们似乎正在走向任何类型的轨道,用户只是随意插入数据而其他东西必须确定它是什么类型,请考虑以下MongoDB文档示例:
{
name: "Fred",
values: [ 1, 2, 3, 4],
}
{
name: "Sally",
values: "a"
}
因此,在Mongo术语中,该文档结构被视为错误。尽管Mongo确实具有灵活的架构概念,但这种混合会破坏事物。所以不要这样做,而是以下面的方式处理,即使模式不同,这是完全可以接受的:
{
name: "Fred",
values: [ 1, 2, 3, 4],
}
{
name: "Sally",
mystring: "a"
}
长话短说,您的应用应该知道正在进入的类型数据。如果您允许user defined forms
,那么应用需要能够为其附加类型。如果您有可能字符串或日期的字段,那么您的应用需要确定它是哪种类型,然后将其投射或正确存储。< / p>
目前,您将从重新考虑使用案例中受益,而不是等待其他事情为您完成所有工作。