2011-07-05 20 views
101

Có chức năng nào để biến một chuỗi thành một đối tượngId trong nút bằng cách sử dụng mongoose không? Lược đồ xác định rằng một cái gì đó là một ObjectId, nhưng khi nó được lưu từ một chuỗi, mongo nói với tôi nó vẫn chỉ là một chuỗi. Ví dụ: đối tượng _id của đối tượng được hiển thị là objectId("blah").Chuỗi Mongode.js của Node.js đến hàm ObjectId

Trả lời

260

Bạn có thể làm điều đó như vậy:

var mongoose = require('mongoose'); 
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003'); 
+0

Vâng, đó là một chút sạch hơn trong trường hợp này. Có thể chỉ cần sử dụng mongo.BSONPure nếu làm từTime() – talentedmrjones

+3

Điều này có gây ra lỗi nếu đó là chuỗi không hợp lệ không? Tìm cách tốt nhất để thực hiện xác thực đầu vào trong một API REST cho các trường id mongo. – Zambonilli

+1

Thực tế nó không gây ra lỗi. – Zambonilli

10

Bạn có thể làm điều đó như thế này:

var mongoose = require('mongoose'); 
var _id = mongoose.mongo.BSONPure.ObjectID.fromHexString("4eb6e7e7e9b7f4194e000001"); 

EDIT: tiêu chuẩn mới đã fromHexString hơn fromString

+1

Vâng, thậm chí nhiều tiêu chuẩn "mới" là dường như được mongoose.mongo.BSONPure.ObjectID.createFromHexString() (của mongoose 3.9.7) – Evereq

+1

Đối với những người đang cố gắng làm điều này, đây là một câu trả lời tốt hơn nhiều so với câu trả lời được chọn vì nó sẽ không chuyển đổi id nếu bạn đã sử dụng id mongo. – ed209

+1

Điều này không còn hoạt động, sử dụng câu trả lời được chấp nhận thay vì – paper1111

5

Đánh giá từ các ý kiến, bạn đang tìm kiếm:

mongoose.mongo.BSONPure.ObjectID.isValid 

Hoặc

mongoose.Types.ObjectId.isValid 
2
var mongoose = require('mongoose'); 
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001"); 
+0

Đây chính là câu trả lời được chấp nhận –

+1

Bạn có thể nhận xét về sự khác biệt giữa 'mongoose.Types.ObjectId' và' mongoose.mongo.ObjectId' không? Các thuộc tính đối tượng của mongoose là khác nhau, nhưng chúng có thể tham chiếu cùng một phương thức bên dưới. Hãy bình luận về các phương thức cơ bản trên 'Types' so với' mongo'. – steampowered

2

Tôi không thể giải quyết phương pháp này (phải thừa nhận là tôi không tìm kiếm dài)

mongoose.mongo.BSONPure.ObjectID.fromHexString 

Nếu schema của bạn mong muốn sở hữu để được loại ObjectId, các chuyển đổi là tiềm ẩn, ít nhất điều này có vẻ là trường hợp trong 4.7.8.

Bạn có thể sử dụng giống như tuy nhiên điều này, mang đến cho một chút flex hơn:

function toObjectId(ids) { 

    if (ids.constructor === Array) { 
     return ids.map(mongoose.Types.ObjectId); 
    } 

    return mongoose.Types.ObjectId(ids); 
} 
Các vấn đề liên quan