【问题标题】:How to set type of field when inserting into mongodb插入mongodb时如何设置字段类型
【发布时间】:2021-01-01 20:15:06
【问题描述】:

所以我正在查询一个 API,接收数据,然后将其存储到 MongoDB。 到目前为止一切正常,除了现在我已经开始使用 Mongo 的聚合管道。在此期间,我意识到 Mongo 将数字数据作为字符串插入。因此,现在,我的聚合管道将无法工作,因为我正在进行数值计算,例如计算平均值等......因为 Mongo 将其视为字符串。

如何在插入期间设置字段的类型.....这样我指定这是浮动等...

到目前为止,我尝试过的是以下代码:但效果不佳,因为 mongo shell 抱怨,因为字段名称以数字开头:

db.weeklycol.find().forEach(function(ch)
{
db.weeklycol.update({
"_id":ch._id},
{"$set":
{
"4_close":parseInt(ch.4_close)
}
});

【问题讨论】:

    标签: python json mongodb pymongo


    【解决方案1】:

    要访问名称很奇怪的属性,请使用 []:

    ch['4_close']
    

    然后关于保存数字,我做了测试:

    > db.test.insertOne({_id:1, field: 2})
    { "acknowledged" : true, "insertedId" : 1 }
    > db.test.find({_id:1})
    { "_id" : 1, "field" : 2 }
    

    好像是加号的吧。您能否发布带有一些虚拟值的代码的确切示例,其中插入的对象具有数字值的属性,并且插入的文档将此值转换为字符串?

    【讨论】:

      【解决方案2】:

      我已经设法通过下面的代码解决了这个问题......所以我在使用下面的代码将它插入到我的“插入”字符串之前更改了变量类型:我创建了这个函数,我调用了我的整个函数在我插入之前的字典......如果它是一个数字,它将转换,否则它将通过: 我也有类似的转换功能....而不是第 4 行的浮点数,我将其更改为日期。

      def convertint(bdic):
      for key, value in bdic.items():
          try:
              bdic[key] = float(value)
          except:
              pass
      return bdic
      

      【讨论】:

        猜你喜欢
        • 2017-09-01
        • 1970-01-01
        • 2018-09-25
        • 1970-01-01
        • 2020-09-25
        • 1970-01-01
        • 2017-10-13
        • 2020-01-18
        • 1970-01-01
        相关资源
        最近更新 更多