2012-04-20 33 views
6

Nếu tôi có id tài liệu mongo dưới dạng chuỗi, làm cách nào để truy vấn nó dưới dạng _id?Nếu tôi có id tài liệu mongo dưới dạng chuỗi, làm cách nào để truy vấn nó dưới dạng _id?

Nó có hoạt động chính xác để thực hiện .find({_id:'stringID'}) hoặc tôi có cần chuyển đổi nó thành đối tượng bson trước không?

+0

của bạn '_id' có thể ** bất cứ điều gì * * (trừ mảng). Vì vậy, có, chuỗi _ids là tốt. –

Trả lời

19

Bạn có nghĩa là bạn có chuỗi 24 chữ số thập phân của một ObjectId không?

Giả sử đó là ý của bạn, hầu hết các trình điều khiển đều có cách để lấy chuỗi và chuyển đổi nó thành một ObjectId. Trong JavaScript đó là:

.find({_id:new ObjectId("4f91bfcfaa7c5687a0c686d4")}) 

Cập nhật để thể hữu ích hơn một chút cho người lái xe nút bản địa (từ tài liệu tại https://github.com/christkv/node-mongodb-native):

// Get the objectID type 
var ObjectID = require('mongodb').ObjectID; 

var idString = '4e4e1638c85e808431000003'; 
collection.findOne({_id: new ObjectID(idString)}, console.log) // ok 
collection.findOne({_id: idString}, console.log) // wrong! callback gets undefined 
+0

Có, bạn hiểu câu hỏi của tôi. Xin lỗi có thể không được viết tốt, '_id' là các đối tượng bson mongo bson mặc định. Họ nhận được đột biến khi gửi json cho khách hàng để họ đang được chuyển đổi thành chuỗi đầu tiên. Khi họ quay trở lại máy chủ, tôi cần phải biến chúng trở lại thành các đối tượng để truy vấn cơ sở dữ liệu với chúng? – fancy

+0

Vâng, để truy vấn bạn cần chuyển đổi chúng thành 'ObjectId' một lần nữa. –

+0

ok, cảm ơn thông tin – fancy

1

Nếu giá trị _id của bạn là chuỗi, bạn có thể truy vấn chúng giống như bất kỳ trường nào khác. (Chỉ cần nhớ, nếu bạn đang thiết giá trị tùy chỉnh cho _id, họ phải được giữ độc đáo, hoặc bạn sẽ nhận được một lỗi khóa trùng lặp.)

Dưới đây là một ví dụ trong Mongo JS Shell:

> db.test.insert({_id:"stringID1"}) 
> db.test.insert({_id:"stringID2"}) 
> db.test.insert({_id:"stringID3"}) 
> db.test.find({_id:"stringID1"}) 
{ "_id" : "stringID1" } 
> 

Đây có phải là những gì bạn đang tìm kiếm? Tôi hy vọng tôi không hiểu lầm câu hỏi của bạn!

+0

Điều này thực sự trả lời câu hỏi ** được hỏi **, nhưng dường như không phải là câu hỏi mà cô ấy muốn nói ** ^^ –

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