0

誰か助けてくれませんか?「住所」フィールドにあるものを単純に取得しようとしています。空のブレース「[]」以外のものを印刷することはできません

レコードの例を次に示します。

{
  "_id": { "$oid" : "51376F833EF9EB361F354ED0" },
  "addresses": [
    {
      "city": "CAMBRIDGE",
      "suffix": "",
      "street_name": "FRANKLIN ST",
      "prefix": "",
      "zipcode": "49503",
      "state": "MA",
      "street_num": "127"
    }
  ],
  "created_at":{ "$date": 1361160419000.000000 }
}

ここに私のクラスコードがあります:

class Buildings(db.Document):
    _id = db.ObjectIdField(required=True)
    addresses = db.ListField(db.EmbeddedDocumentField('Address'))
    created_at = db.DateTimeField(default=datetime.datetime.now, required=False)
    meta = {
        'allow_inheritance': False,
        'indexes': ['_id'],
        'ordering': ['-created_at']
    }
class Address(db.EmbeddedDocument):
   city = db.StringField(required=False)
   suffix = db.StringField(required=False)
   street_name = db.StringField(required=False)
   zipcode = db.StringField(required=False)
   prefix = db.StringField(required=False)
   state = db.StringField(required=False)
   is_contracted = db.IntField(required=False)
   street_num = db.StringField(required=False)

そして、埋め込まれたドキュメントを印刷する必要があるが、各オブジェクトに対して [] のみを返すループ。

for building in Buildings.objects:
    print building.addresses

なぜこれがうまくいかないのですか?

4

1 に答える 1

2

コードが mongodb にどのようにレコードを保存するかを確認してください。

address = Address(**{
    "city": "CAMBRIDGE",
    "suffix": "",
    "street_name": "FRANKLIN ST",
    "prefix": "",
    "zipcode": "49503",
    "state": "MA",
    "street_num": "127"
})
Buildings(_id=ObjectId(), addresses=[address]).save()

次の結果が表示されます。

{
    "_id": ObjectId("5146e17969d90d0f124536ee"),
    "addresses": [{
        "_types": ["Address" ],
        "city": "CAMBRIDGE",
        "suffix": "",
        "street_name": "FRANKLIN ST",
        "state": "MA",
        "zipcode": "49503",
        "prefix": "",
        "_cls": "Address",
        "street_num": "127"
    }],
    "created_at" : ISODate("2013-03-18T12:42:17.389Z")
}

私はあなたのモデルを次のように実装します:

class Address(db.EmbeddedDocument):
    city = db.StringField()
    suffix = db.StringField()
    street_name = db.StringField()
    zipcode = db.StringField()
    prefix = db.StringField()
    state = db.StringField()
    is_contracted = db.IntField()
    street_num = db.StringField()

    meta = {
        'allow_inheritance': False,
    }


class Buildings(db.Document):
    addresses = db.ListField(db.EmbeddedDocumentField(Address))
    created_at = db.DateTimeField(default=datetime.datetime.now)

    meta = {
        'allow_inheritance': False,
        'indexes': ['_id'],
        'ordering': ['-created_at'],
    }

レコードを次のように保存するには:

{
    "_id": ObjectId("5146e2b069d90d0f2cc3911a"),
    "addresses": [{
        "city": "CAMBRIDGE",
        "suffix": "",
        "street_name": "FRANKLIN ST",
        "state": "MA",
        "zipcode": "49503",
        "prefix": "",
        "street_num": "127"
    }],
    "created_at": ISODate("2013-03-18T12:47:28.939Z")
}

"_id": { "$oid": "51376F833EF9EB361F354ED0"}フィールドとでドキュメントを保存する方法はわかりませんが"created_at":{"$date": 1361160419000.000000}、その問題があると思います。

requiredフィールド引数のデフォルトは ですFalse

EmbeddedDocumentFieldReferenceFiledパラメータをクラスまたは文字列(自己参照用)EmbeddedDocumentとして取得できます。Document'self'

オブジェクトとしてIDを持ちたい場合は、おそらくコードでも作成する必要があります。

別の日時形式が必要な場合は、おそらくComplexDateTimeField基本クラスで使用または実装する必要がありますComplexDateTimeField

于 2013-03-18T09:59:31.110 に答える