gpt4 book ai didi

javascript - Mongo $lookup $pipeline 具有多个 $expr 参数,未在 $lookup 结果中返回正确的数据

转载 作者:行者123 更新时间:2023-12-02 23:35:28 27 4
gpt4 key购买 nike

我有两个 mongo 集合,一个包含约会提醒,另一个包含通知。我正在尝试返回给定的branchId/clinic_id中的所有存档:错误提醒的结果,并包括其已确认的:错误通知。另外,我想确保约会显示在结果中,无论它们是否有通知。

我需要通过branchId(又名clinic_id)“加入”集合,然后为每个生成的预约提醒创建任何未确认通知的数组。

我返回了正确的预约,但是notif 数组未通过匹配病人 ID/病人 ID 进行过滤。每个提醒似乎都包含完全相同的 notif 数组。除此之外,其他一切似乎都是正确的。所以,我的问题是如何确保 notif 数组仅包含与提醒的 Patient_id 值匹配的病人 ID?

chop 的预约提醒架构:

      {
time: {
type: Date,
required: true
},
patient_id: {
type: String,
required: true
},
status: {
type: String,
default: 'unconfirmed'
},
archive: {
type: Boolean,
default: false
},
branch: [
// Incorrectly setup as an array rather than an object.
// Can $unwind as there is only ever one item in the array
{
name: {
type: String,
required: true
},
clinic_id: { // aka branchId
type: String,
required: true
}
}
]
}

通知架构:

{
branchId: { type: String, required: true }, // aka clinic_id
patientId: { type: String, required: true },
acknowledged: { type: Boolean, default: false },
date: { type: Date, default: Date.now }
}

聚合查询:

[
{ $match: { 'branch.0.clinic_id': '1', archive: false } },
{ $unwind: '$branch' },
{
$lookup: {
from: 'notifications',
let: { clinic_id: '1', patient_id: '$patientId' }, //<-- issue with patient_id?
pipeline: [
{
$match: {
$expr: {
$and: [
{ $eq: ["$patientId", "$$patientId"] }, <-- errors $$patientId unknown value. $$patient_id returns 0 results.
{ $eq: ['$branchId', '$$clinic_id'] },
{ $eq: ['$acknowledged', false] }
]
}
}
}
],
as: 'notif'
}
}
]

示例输出,其中包含对我遇到的所需输出和不正确输出的注释:

  {
patient_id: '1',
time: '2019-05-29T11:00:00.000Z',
status: 'unconfirmed',
archive: false,
branch: [
{
name: 'Example location',
clinic_id: '100',
}
],
notif: [
{
// This is correct
branchId: '100', // branchId matches clinic_id
patientId: '1', // patientId matches contacts patient_id
acknowledged: false, // notification is unacknowledged
date: '2019-05-18T16:18:05.480Z'
},
{
// This is not correct
branchId: '100',
patientId: '2', // PatientId does not match patient_id of reminder
acknowledged: false,
date: '2019-05-20T16:18:05.480Z'
}
]
}

最佳答案

首先,您必须使用$$ Patient_id,这是使用查找变量的正确语法。

使用正确语法得到 0 结果的原因是(我假设您没有共享完整的架构)类型不同。

请注意,通知架构中的 patentId 已定义:

病人 ID:{ 类型:字符串,必需:true },其类型为String

来自您最后共享的“所需”输出架构:

{
患者ID:1,
...
}

看起来您的病人 ID 被定义为数字,因此文档之间没有匹配的原因。

关于javascript - Mongo $lookup $pipeline 具有多个 $expr 参数,未在 $lookup 结果中返回正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56306406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com