2012-08-08 10 views
7

Trong mongoengine giá trị nào phải được đặt thành ReferenceField. Tôi có nghĩa là chúng ta nên cung cấp trong "ObjectId" của tài liệu mà tham chiếu được thực hiện. Ví dụ,mongoengine- cửa hàng tham chiếu số

class Bar(Document): 
    content = StringField() 
    foo = ReferenceField('Foo') 

Đối tượng của lớp Bar nên có những gì giá trị thiết lập để trong thuộc tính "foo". Có nên là ObjectId của một số tài liệu trong bộ sưu tập 'Foo' không? Tôi cũng có thể đặt bất kỳ trường duy nhất nào khác làm giá trị trong trường tham chiếu đề cập đến trường nào không?

Trả lời

3

Nó lưu trữ một DBRef, bạn chỉ cần chuyển một cá thể Foo và nó sẽ được chuyển đổi tự động. Xem phần trong tài liệu: http://mongoengine-odm.readthedocs.org/en/latest/guide/defining-documents.html?highlight=referencefield

+0

nhờ giao phối, tôi đoán họ đã cập nhật tài liệu của họ cho phiên bản 0.6 .20. Tôi đã sử dụng 0.6.18, mặc dù tôi sẽ cập nhật nó 0.6.20 Cảm ơn rất nhiều cho người bạn giúp đỡ. –

10

Trước phiên bản MongoEngine 0.8, nó lưu trữ DBRef theo mặc định. Đối với 0.8 và sau đó, nó lưu trữ một ObjectId theo mặc định.

Có một tham số dbref rằng bạn nên sử dụng khi tạo ReferenceField (explicit is better than implicit):

class Bar(Document): 
    content = StringField() 
    foo = ReferenceField('Foo', dbref = True) # will use a DBRef 
    bar = ReferenceField('Bar', dbref = False) # will use an ObjectId 

Đây là documentation for the ReferenceField.

Tôi có phiên bản 0.7.9 được cài đặt, và khi tôi tạo ra một ReferenceField mà không tham số dbref, tôi nhận được cảnh báo sau đây:

[...]/lib/python2.7/site-packages/mongoengine/fields.py:744: FutureWarning: 
ReferenceFields will default to using ObjectId strings in 0.8, set DBRef=True 
if this isn't desired 
warnings.warn(msg, FutureWarning) 
+0

Ok, cảm ơn người bạn cập nhật :) –