Node.js Mongoose.js рядок до функції ObjectId


174

Чи існує функція перетворення рядка в objectId у вузлі за допомогою мангуста? Схема визначає, що щось є ObjectId, але коли воно зберігається з рядка, монго каже мені, що це все-таки лише рядок. Наприклад, _id об'єкта відображається як objectId("blah").

Відповіді:


419

Ви можете це зробити так:

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

Так, це трохи чистіше в цьому випадку. Можливо, потрібно буде використовувати mongo.BSONPure, якщо робити з Time ()
талановитіmrjones

3
Це кидає помилку, якщо це невірний рядок? Шукаєте найкращий спосіб зробити перевірку введення в API REST для полів мондо id.
Замбоніллі

1
Насправді не відповідає на питання, оскільки за допомогою цієї методології рядок буде перетворений і не буде таким самим, як оригінал.
ed209

mongoose.Types.ObjectId (id), але мій ідентифікатор не визначений, то що він поверне? новий ідентифікатор або помилка
Кеваль Бхатт

@KevinDente Я використовую Nodejs з Typescript, я спробував ваше рішення, але все одно отримую рядок, і мій запит не повертає те, що він повинен повернути. будь-яка ідея, як це зробити на машинопис?
SOufiane Fadil

9

Ви можете це зробити так:

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

РЕДАКТУВАННЯ: Новий стандарт має замістьHideString, ніж відString


1
Ну, ще більш "новим" стандартом, здається, є mongoose.mongo.BSONPure.ObjectID.createFromHexString () (станом на мангуста 3.9.7)
Evereq

1
Для тих, хто намагається це зробити, це набагато краща відповідь, ніж обрана відповідь, оскільки вона не перетворить ідентифікатор, якщо ви вже використовуєте ідентифікатор монго.
ed209

1
Це більше не працює, замість цього використовуйте прийняту відповідь
paper1111

BSONPure не є частиною mongoose.mongoдля мене. Чи може хтось підтвердити?
Артур Тагісов

5

Судячи з коментарів, ви шукаєте:

mongoose.mongo.BSONPure.ObjectID.isValid

Або

mongoose.Types.ObjectId.isValid

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

3
Чи можете ви прокоментувати різницю між mongoose.Types.ObjectIdта mongoose.mongo.ObjectId? Властивості об'єкта мангуста різні, але вони можуть посилатися на той самий метод під ним. Прокоментуйте , що лежать в основі методів по Typesпорівнянні mongo.
парі

5

Я не міг вирішити цей метод (правда, я довго не шукав)

mongoose.mongo.BSONPure.ObjectID.fromHexString

Якщо ваша схема очікує, що властивість має тип ObjectId, перетворення є неявним, принаймні, так виглядає в 4.7.8.

Однак ви можете використовувати щось подібне, що дає трохи більше гнучкості:

function toObjectId(ids) {

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

    return mongoose.Types.ObjectId(ids);
}

3

Ви також можете використовувати це

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

це найпростіший спосіб зробити це


0

Просто перегляньте фрагмент коду нижче, якщо ви реалізуєте API REST через експрес та мангуст. (Приклад для додавання)

....
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
})
}
...

Сподіваюся, що це допомагає

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.