2010-11-14 17 views
15

Ví dụ ...Có thể sử dụng "ID đối tượng" của Mongo làm mã định danh duy nhất không? Nếu vậy, làm thế nào tôi có thể chuyển đổi nó thành một chuỗi và tìm kiếm nó bằng chuỗi?

user/view/?id=324gijsdfi3h25o1 

tôi có thể str() nó ... nhưng ...

Làm thế nào tôi có thể find nó lên bằng chuỗi?

Chỉnh sửa: Tôi muốn mỗi tài liệu trong Mongo có một số nhận dạng duy nhất (thường là một chuỗi) mà tôi có thể tra cứu. Tôi đã hy vọng ID đối tượng có thể là điều này (vì nó có rất nhiều chữ cái và nó là duy nhất.) Và tôi muốn nó hoạt động với HTTP GET. xem? uid = e93jfsb0e3jflskdjf

+0

Bạn có thể làm rõ câu hỏi bằng cách cung cấp những tài liệu không trả lời cho bạn: http://www.mongodb.org/display/DOCS/Object+IDs –

Trả lời

17

Bạn có thể tạo một ObjectId mới bằng chuỗi. Ví dụ này sử dụng bảng điều khiển MongoDB:

db.users.find({ _id: ObjectId("4cdfb11e1f3c000000007822") }) 

Tôi không thể kể câu hỏi mà bạn đang sử dụng (nếu có), nhưng hầu hết trình điều khiển cũng hỗ trợ chức năng này.

Bạn KHÔNG nên chuyển đổi ObjectId trong cơ sở dữ liệu thành chuỗi và sau đó so sánh nó với chuỗi khác. Nếu bạn làm điều này, MongoDB không thể sử dụng chỉ mục _id và nó sẽ phải quét tất cả các tài liệu, dẫn đến hiệu suất truy vấn kém.

+2

Tôi nên so sánh nó với các chuỗi khác như thế nào nếu tôi không không sử dụng ObjectID làm định danh duy nhất? – TIMEX

+0

@TIMEX: Ý của bạn là gì? Bạn có thể cập nhật câu hỏi của mình để giải thích chính xác những gì bạn đang cố gắng đạt được không? –

+2

Tôi muốn mỗi tài liệu ở Mongo có một số nhận dạng duy nhất (thường là một chuỗi) mà tôi có thể tra cứu. – TIMEX

12

Để câu hỏi của bạn:

Is it ok để sử dụng “Object ID” Mongo như định danh duy nhất của nó?

Có, nó được thiết kế cho mục đích này. Việc tạo các ID duy nhất có thể là một nỗi đau trong môi trường bị phân mảnh, do đó MongoDB thực hiện điều này cho bạn.

Nếu có, làm thế nào tôi có thể chuyển đổi nó thành chuỗi và tìm kiếm theo chuỗi?

Không. Nó không phải là một chuỗi. MongoDB thực sự cho phép bạn ghi đè ID mặc định. Vì vậy, nếu bạn bắt đầu tìm kiếm #"4cdfb11e1f3c000000007822", Mongo nghĩ rằng bạn đang tìm kiếm một chuỗi. Nếu thay vào đó bạn tìm kiếm ObjectId("4cdfb11e1f3c000000007822"), Mongo sẽ tìm ObjectId (hoặc MongoID).

Trong câu hỏi của bạn, có vẻ như bạn đang cố chuyển nó thành chuỗi. Làm thế nào bạn chuyển đổi này thành một "objectid" sẽ phụ thuộc vào trình điều khiển của bạn. PHP có MongoId. Các trình điều khiển khác có chức năng tương tự.

0

ObjectId là một cách tiện dụng để tạo một _id duy nhất, nhưng bạn tự do tự làm điều đó. Ví dụ:

var o = {_id: Math.random().toString(36).substring(10)}; 
collection.insert(o, handleCollision); 

hoạt động tốt, mặc dù bạn phải tự mình xử lý xung đột. Sau đó, bạn có thể sử dụng so sánh chuỗi trực tiếp khi cần thiết.

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