Вопрос

У меня есть несколько документов MongoDB с этой схемой:

Id: {type: "id", key: true, computed: true, nullable: false},
Name: {type: "string", nullable: false, maxLength: 50}

и эти документы предоставляются как OData небольшим веб-приложением (я использую Express, JayData и Mongoose).Вот некоторые из этих документов:

{ "_id" : ObjectId("5343fd656b9c5c084b8f2a70"), "Name" : "Service74"},
{ "_id" : ObjectId("5343fd656b9c5c084b8f2a6f"), "Name" : "Service73"},
{ "_id" : ObjectId("5343fd656b9c5c084b8f2a6e"), "Name" : "Service72"},
...

Если я наберу этот адрес http://localhost:8080/marketplace/Services('5343fd656b9c5c084b8f2a70') которые соответствуют Сервис74 Я получаю такой результат:

...
<d:Id>NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw</d:Id>
<d:Name>Service74</d:Name>
...

Конечно, если я использую идентификатор, указанный в результате, я получаю ту же страницу.

Проблема возникает, когда я пытаюсь использовать функцию мангуста. findById:

app.post("/addCompare/:id", function(req, res) {
    console.log(req.params.id);
    Services.findById(req.params.id, function(err, service) {
        if(!err) {console.log(service);}
        else {console.log(err);}
    });
    res.send(200);
});

я понимаю это NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw а затем эта ошибка:

{ message: 'Cast to ObjectId failed for value "NTM0M2ZkNjU2YjljNWMwODRiOGYyYTU5" at path "_id"',
  name: 'CastError',
  type: 'ObjectId',
  value: 'NTM0M2ZkNjU2YjljNWMwODRiOGYyYTU5',
  path: '_id' }

Где я ошибаюсь?Скажите мне, если я пропущу какую-то другую информацию...

Спасибо.

ПС:Я нашел аналогичную проблему здесь Мангуста:Приведение к ObjectId не удалось, но если я изменю определение модели для Mongoose (в котором на самом деле я не объявляю идентификатор), включив это определение:

var serviceSchema = mongoose.Schema({
    _id: String,
    ...

ничего не меняется...

Это было полезно?

Решение

А 5343fd656b9c5c084b8f2a70 — внутренний идентификатор объекта, который используется на стороне сервера.Это значение закодировано в формате Base64 через OData, поэтому вы получаете NTM0M2ZkNjU2YjljNWMwODRiOGYyYTcw в поле Идентификатор.Объект можно легко получить по идентификатору, вызвав atob(req.params.id) по полученному идентификатору.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top