【问题标题】:mongoengine embedded field updatemongoengine 内嵌字段更新
【发布时间】:2014-02-26 22:22:42
【问题描述】:

这是我的架构

class Url_per_date(EmbeddedDocument):
    date = DateTimeField()
    count = IntField(default=0)

class Daily_visit(Document):
    domain = StringField()
    count = IntField(default=0)
    per_date = ListField(EmbeddedDocumentField('Url_per_date'))

我有这样的收藏:

{
"_id" : ObjectId("51c97e685aa3b3414c7e406a"),
"_types" : "Daily_visit",
"count" : 1,
"domain" : "yahoo.com",
"per_date" : {
        "count" : 1,
        "date" : ISODate("2013-05-20T00:00:00Z")
    }
}

我需要按日期范围更新 yahoo.com。如果 per_date 没有 ISODate("2013-05-20T00:00:00Z") 我需要创建它,如果我有它 inc__count=1。

【问题讨论】:

    标签: python mongodb mongoengine


    【解决方案1】:

    在 MongoEngine 中,通过用双下划线替换点表示法来引用嵌入字段:

    也可以使用字段查找语法来引用嵌入文档上的字段,方法是使用双下划线代替对象属性访问语法中的点:

    http://mongoengine-odm.readthedocs.org/en/v0.6.8/guide/querying.html#filtering-queries

    【讨论】:

      【解决方案2】:

      一开始你的结果一定是这样的

      {
      "_id" : ObjectId("51c97e685aa3b3414c7e406a"),
      "_types" : "Daily_visit",
      "count" : 1,
      "domain" : "yahoo.com",
      "per_date" : [{
              "count" : 1,
              "date" : ISODate("2013-05-20T00:00:00Z")
          }]
      }
      

      如何创建日期?为今天创建一个新的并选择这样的数据库

      today = datetime.today()
      try:
          yahoo_obj = Daily_visit.objects.get(domain="yahoo.com", per_date__date=date)
          yahoo_obj.per_date[-1].count += 1
      except:
          yahoo_obj = Daily_visit.objects.get(domain="yahoo.com")
          yahoo_obj.per_date = .... # just append new list
      

      【讨论】:

        猜你喜欢
        • 2015-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-19
        • 1970-01-01
        • 2021-04-16
        • 2019-05-05
        • 2019-09-01
        相关资源
        最近更新 更多