2012-04-13 38 views
26

Vì vậy, tôi cần tham khảo các tài liệu phụ cụ thể duy nhất từ ​​các mục trong bộ sưu tập của mình. Ví dụ:Làm cách nào để tạo ID duy nhất cho tài liệu được nhúng trong MongoDB?

User = { 
    'name': 'jim', 
    'documents: [ 
     {'id': 0001, 'title': "My document"}, 
     {'id': 0002, 'title': "My second document!"}, 
    ] 
} 

Vì vậy, tôi cần để có thể tự động tạo ID cho tài liệu mới, tốt nhất là không ở mức ứng dụng (vì sẽ có điều kiện chủng tộc trong kịch bản phát triển thực tế).

Có cách nào để sử dụng ObjectId được tạo tự động của Mongo (được sử dụng trong trường _id ở cấp sưu tập) hay tương tự?

+1

Không nếu bạn sử dụng Hướng dẫn sẽ không –

Trả lời

19

Có, sử dụng ObjectId của mongo là cách để đi. Điều duy nhất là: bạn phải tự tạo ra chúng, trong mã ứng dụng. Chúng có nghĩa là độc nhất toàn cầu, các công nhân khác nhau sẽ không tạo ra hai ObjectIds giống hệt nhau, vì vậy không có điều kiện chủng tộc nào theo nghĩa đó.

Tất cả trình điều khiển chính thức phải cung cấp cách tạo ObjectId. Dưới đây là cách thực hiện trong Ruby:

oid = BSON::ObjectId.new 
+0

Bạn có ý tưởng nào về cách thực hiện nó với mongo CLI ??? –

+2

@PiniCheyni Như thế này: 'new ObjectId()' – Clouren

9

Tất cả các trình điều khiển đều có chức năng tạo ObjectIds.

Trong vỏ bạn chỉ cần làm new ObjectId():

> db.test.insert({x:new ObjectId()}); 
> db.test.find(); 
{ "_id" : ObjectId("4f88592a06c05e4de90d0bc1"), "x" : ObjectId("4f88592a06c05e4de90d0bc0") } 

Trong Java nó new ObjectId() là tốt. Xem tài liệu API cho trình điều khiển của bạn để xem cú pháp cụ thể.

0

Và dưới đây là cách để làm điều đó trong Clojure, giả sử việc sử dụng congomongo:

(import org.bson.types.ObjectId) 
(str (ObjectId.)) ; => "12345xxxxx" 
6

Với mongoengine tạo một ObjectId trong tài liệu được nhúng như sau:

from bson.objectid import ObjectId 

class Address(EmbeddedDocument): 
    _id = ObjectIdField(required=True, default=lambda: ObjectId()) 
    street = StringField() 
+0

'default = ObjectId' cũng nên hoạt động –

Các vấn đề liên quan