Mongodb $lookup: искать только те документы, которые удовлетворяют условию.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Mongodb $lookup: искать только те документы, которые удовлетворяют условию.

Сообщение Anonymous »

У меня есть две коллекции: задачи и пользователи. Коллекция пользователей имеет три важных поля: user_id, Parent_user_id и сведения. задачи имеют поле user_id, которое связывает их с пользователями.
Требование API — прикрепить соответствующие данные user.details с документом Tasks, и он должен сопоставляться с родительским_user_id. Для этого я использую $lookup для сопоставления и размещения соответствующих user_details, но поскольку иногда родительский_user_id может отличаться от user_id, мне приходится использовать два поиска.< /p>
Первый $lookup присоединяет родительский_user_id для user_id в коллекции задач, а следующий $lookup прикрепляет тот подробности, используя извлеченный родительский_user_id.
Мой текущий конвейер:

Код: Выделить всё

[
{
'$lookup': {
'from': 'users',
'let': {
'uid': '$user_id',
'pid': '$project_id'
},
'pipeline': [
{
'$match': {
'$expr': {
'$and': [
{
'$eq': [
'$project_id', '$$pid'
]
}, {
'$eq': [
'$user_id', '$$uid'
]
}
]
}
}
}, {
'$project': {
'_id': 0,
'parent_user_id': 1
}
}
],
'as': 'parent_info'
}
}, {
'$replaceRoot': {
'newRoot': {
'$mergeObjects': [
{
'$arrayElemAt': [
'$parent_info', 0
]
}, '$$ROOT'
]
}
}
}, {
'$project': {
'parent_info': 0
}
}, {
'$lookup': {
'from': 'users',
'let': {
'pid': '$project_id',
'uid': '$parent_user_id'
},
'pipeline': [
{
'$match': {
'$expr': {
'$and': [
{
'$eq': [
'$project_id', '$$pid'
]
}, {
'$eq': [
'$user_id', '$$uid'
]
}
]
}
}
}, {
'$project': {
'_id': 0,
'details': 1
}
}
],
'as': 'user_info'
}
}, {
'$replaceRoot': {
'newRoot': {
'$mergeObjects': [
{
'$arrayElemAt': [
'$user_info', 0
]
}, '$$ROOT'
]
}
}
}, {
'$project': {
'user_info': 0,
'project_id': 0
}
}
]
Все работает нормально. Проблема в том, что в большинстве случаев родительский_user_id совпадает с user_id, поэтому я могу просто получить детали в самом первом поиске и полностью игнорировать второй поиск, но я не могу добиться это.
Любая помощь будет оценена по достоинству.

Подробнее здесь: https://stackoverflow.com/questions/758 ... -condition
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»