Как объединить две коллекции в MongoDB и NodeJS с помощью $lookup и DbRef?

Если у меня есть две коллекции, в одной из которых есть dbref, как можно объединиться, используя $lookup и dbref?

1 ответ

DBref - это объект BSON, и вы не можете выполнить поиск, используя его значение.

НО, есть способ сделать это, преобразовав объект DBRef в массив. Несколько месяцев назад я написал ответ, описывающий, как это сделать.

Краткое объяснение

Скажем, у вас есть объект DBRef, как это:

myField: DBRef("otherCollection", ObjectId("582abcd85d2dfa67f44127e0")),

Используйте $objectToArray на myField, как это

db.myColl.aggregate([
    {
        $project: { 
            transformedDBRef: {$objectToArray: "$myField"},                
            }    
    },    
])

Результатом будет массив из двух объектов, один объект для ссылки, один для ObjectId, содержащегося в DBRef, каждый с полем "k" и полем "v". Это будет выглядеть так:

transformedDBRef: [{"k" : "$ref","v" : "otherCollection"},{"k" : "$id","v" : ObjectId("582abcd85d2dfa67f44127e0")}

Затем вы можете grep ObjectId. Для полного решения, пожалуйста, проверьте ссылку выше.

Другие вопросы по тегам