У меня есть 2 коллекции, я хочу объединить их, используя оператор $lookup
.Поля, к которым я хочу присоединиться, имеют разные типы.Мне не разрешено использовать $toObjectId
оператор из-за проблем с обновлением базы данных, а также мне не разрешено изменять существующие данные.
Сбор рецептов
{"_id" : ObjectId("p1"), "currentOrderId" : "o1"}
{"_id" : ObjectId("p2"), "currentOrderId" : "o2"}
{"_id" : ObjectId("p3"), "currentOrderId" : "o3"}
{"_id" : ObjectId("p4"), "currentOrderId" : "o4"} ...
Сбор заказов
{"_id" : ObjectId("o1"), "orderNumber": "123"}
{"_id" : ObjectId("o2"), "orderNumber": "123"}
{"_id" : ObjectId("o3"), "orderNumber": "123"}
{"_id" : ObjectId("o4"), "orderNumber": "123"} ...
Я должен присоединить документы заказа к документам рецепта, чтобы моя коллекция результатов выглядела примерно так:
{"_id" : ObjectId("p1"),
"currentOrderId" : "o1",
"currentOrder": {
"_id" : ObjectId("o1"),
"orderNumber": "123"
}
...... (еще много документов) .......
Мне удалось присоединиться только к одной паре документов предписания и заказа по следующему запросу:
db.prescription.aggregate([
{ $match: {"_id":ObjectId("p1")}},
{ $addFields: { "coid": ObjectId("o1")}},
{ $lookup: {
from: "order",
localField: "coid",
foreignField: "_id",
as: "currentOrder"
}},
{
$unwind: "$currentOrder",
},
])
Примечание. Я жестко закодировал $match
и $addfields
для проверкимой запросТеперь я хочу применить этот запрос, чтобы иметь возможность объединить все заказы в набор рецептов в пакетном режиме.
Вот что я думаю:
Мы не знаемсколько там рецептов или их _id's
, поэтому нам нужно выполнить один запрос, чтобы получить их _ids
.И сохраните его в списке.
Мне нужно применить этот запрос в пакетном режиме, чтобы я мог удалить оператор сопоставления.
Мне также нужно получить список заказов _id's
, я могу выполнить другой запрос к коллекции рецептов, чтобы получить список строк идентификаторов заказов.
Мне нужно каким-то образом преобразовать список строк из шага 3 в objectID, в пакете.
Извините, это все, что у меня есть сейчас.Я буду рассматривать ответы, связанные с большим количеством запросов, если количество запросов постоянно.Обратите внимание, что я не могу использовать любые операторы, представленные после версии 3.6.
Любая помощь или советы приветствуются.