【问题标题】:MongoEngine: Adding Fields to Dynamic DocumentMongoEngine:向动态文档添加字段
【发布时间】:2014-06-05 11:54:33
【问题描述】:

我想将动态字段存储到文档中,但每个文档可以有不同的字段。

例如:

Class SampleDoc(DynamicDocument):
   xyz = StringField()

df = "field1"
a = SampleDoc()
a.df = "testing"
a.save()

如果我运行上述程序,mongodb 文档如下所示。

{ "_id" : ObjectId("53905681e5ba5b3bfd1f5242"), "_cls" : "DataPoint", "df" : "testing" }

但我想要的是字段名称应该是“field1”而不是像这样的“df”..

{ "_id" : ObjectId("53905681e5ba5b3bfd1f5242"), "_cls" : "DataPoint", "field1" : "testing" }

这只是一个示例代码,所以我知道 df 值是什么,但实际上我不知道 df 持有什么值。那么存储时动态命名字段的方法是什么。

有一个类似的问题using key as value in Mongoengine,但解决方案建议使用DictField(),但我不想使用它。

【问题讨论】:

    标签: mongodb mongoengine


    【解决方案1】:

    看了源码中的BaseDocument.py,找到了解决办法。

    df = "field1"
    a = SampleDoc()
    a.__setattr__(df,"testing")
    a.save()
    

    【讨论】:

      【解决方案2】:

      在 mongoDB shell 中这对我有用:

      df = "field1"
      a = {}
      a[df.toString()] = "testing" //use [] and toString here
      db.test.save(a)
      
      db.test.find(a)
      { "_id" : ObjectId("539062f5944a6efde79f7c1d"), "field1" : "testing" }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-24
        • 2012-06-05
        • 1970-01-01
        相关资源
        最近更新 更多