Недопустимая ошибка длины идентификатора объекта в функции ObjectId в $ project с использованием Mongodb 3.4.15 - PullRequest
0 голосов
/ 28 февраля 2019

Это мое объединение

db.getCollection("entities").aggregate([
    {$match : {...omissis..},
    {$project : {ancestors : 1}},  
    {$unwind: "$ancestors"}]);

Результат

{ 
    "_id" : ObjectId("5b855ffb17285c29501dd801"), 
    "ancestors" : "5c62ef9b8521e37b80517583"
},
{ 
    "_id" : ObjectId("5b8537d3571c4f3e3c0dcf54"), 
    "ancestors" : "5c75565b3e44853a18cc9d11"
}

Я хочу преобразовать строку предков в ObjectId.Я сделал много тестов, мой последний добавляет этот конвейер

{$project: {
             result : {
                    "$let" : {
                              "vars" : { "id" : "$ancestors" },
                              "in" : ObjectId('$$id')
                             }
                       }
           } 
 }

Все тесты, которые я сделал, имеют одну и ту же ошибку

Ошибка: недопустимый идентификатор объекта: длина:

Допустимая строка предков ObjectId, и я не понимаю, как решить эту ошибку.

Я знаю, что есть новые команды с Mongodb 4.0, но этот проект все еще использует3.4.15.

1 Ответ

0 голосов
/ 28 февраля 2019

Я использовал cursor и javascript для достижения этой цели.Пожалуйста, попробуйте это

db.getCollection("entities").aggregate([
    {$match : {...omissis..},
    {$project : {ancestors : 1}},  
    {$unwind: "$ancestors"}]).forEach(function(doc){
    doc.ancestors = ObjectId(doc.ancestors)
    print(doc);
    })
...