Chuỗi Node.js Mongoose.js cho hàm ObjectId


174

Có một chức năng để biến một chuỗi thành một objectId 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 cho tôi biết nó vẫn chỉ là một chuỗi. Ví dụ, _id của đối tượng được hiển thị dưới dạng objectId("blah").

Câu trả lời:


419

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

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

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 các mongo.BSONPure nếu làm FROMTIME ()
talentedmrjones

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

1
Không thực sự trả lời câu hỏi vì sử dụng phương pháp này, chuỗi sẽ được chuyển đổi và không giống với bản gốc.
ed209

mongoose.Types.ObjectId (id) nhưng id của tôi không được xác định thì nó sẽ trả về cái gì? id hoặc lỗi mới
Keval Bhatt

@KevinDente Tôi đang sử dụng Nodejs với Typecript, tôi đã thử giải pháp của bạn nhưng vẫn nhận được một chuỗi và truy vấn của tôi không trả về những gì nó sẽ trả về. bất kỳ ý tưởng về làm thế nào để làm điều đó trên bản in?
SOufiane Fadil

9

Bạn có thể làm như thế này:

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

EDIT: Tiêu chuẩn mới có từHexString chứ không phải từString


1
Chà, thậm chí nhiều tiêu chuẩn "mới" hơn dường như là mongoose.mongo.BSONPure.ObjectID.createFromHexString () (kể từ mongoose 3.9.7)
Evereq 16/1/2015

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 đang sử dụng id mongo.
ed209

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

BSONPure không phải là một phần của mongoose.mongotôi. Ai có thể xác nhận?
Artur Tagisow

5

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

mongoose.mongo.BSONPure.ObjectID.isValid

Hoặc là

mongoose.Types.ObjectId.isValid

5
var mongoose = require('mongoose');
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001");

3
Bạn có thể nhận xét về sự khác biệt giữa mongoose.Types.ObjectIdmongoose.mongo.ObjectId? Các thuộc tính đối tượng của cầy mangut là khác nhau, nhưng chúng có thể được 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 pháp cơ bản trên Typesvs mongo.
steampowered

5

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

mongoose.mongo.BSONPure.ObjectID.fromHexString

Nếu lược đồ của bạn mong muốn thuộc tính thuộc loại ObjectId, thì việc chuyển đổi là ẩn, ít nhất đây có vẻ là trường hợp trong 4.7.8.

Tuy nhiên, bạn có thể sử dụng một cái gì đó như thế này, giúp linh hoạt hơn một chút:

function toObjectId(ids) {

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

    return mongoose.Types.ObjectId(ids);
}

3

Bạn cũng có thể sử dụng

const { ObjectId } = require('mongodb');
const _id = ObjectId("4eb6e7e7e9b7f4194e000001");

cách đơn giản nhất để làm điều đó


0

Chỉ cần xem đoạn mã dưới đây nếu bạn đang triển khai API REST thông qua express và mongoose. (Ví dụ cho THÊM)

....
exports.AddSomething = (req,res,next) =>{
  const newSomething = new SomeEntity({
 _id:new mongoose.Types.ObjectId(), //its very own ID
  somethingName:req.body.somethingName,
  theForeignKey: mongoose.Types.ObjectId(req.body.theForeignKey)// if you want to pass an object ID
})
}
...

Hy vọng nó giúp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.