Как объединить две коллекции в 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. Для полного решения, пожалуйста, проверьте ссылку выше.