gpt4 book ai didi

mongodb - 在 MongoDB 中展开查找操作的结果时丢失记录

转载 作者:可可西里 更新时间:2023-11-01 10:02:36 26 4
gpt4 key购买 nike

我在“预订”表上收到了一个很长的查询,它工作得很好,除非我要求代理。

我们有一个“用户”表。该表包含用户、管理员、代理等。

“预订”总是有一个“用户”,所以 $lookup 总是很顺利。

“预订”有时有一个“代理”,但大多数时候该字段为空白“”。因此,当我执行 $lookup 时,它会破坏整个查询并且不返回任何内容。

我想执行 $lookup,但前提是“代理”字段不为空。或者找到一种方法,如果 $lookup 失败,它不会破坏整个查询。

左侧是实际上有一个包含有效用户的“代理”字段。_id - 我们在这里得到结果

右侧是“代理”字段缺失、包含空白值或包含无效值的情况。 - 在这里它打破了整个查询。

enter image description here

下面是一个带有数据的例子来尝试一下

db.getCollection('booking').aggregate([
{
$match: {
property: "001",
checkin: {$gte: 1483596800},
checkout: {$lte: 1583596800}
}
},
{
$lookup: {
from: "users",
localField: "user",
foreignField: "_id",
as: "users"
}
},
{ $unwind: "$users" },
{
$lookup: {
from: "users",
localField: "agent",
foreignField: "_id",
as: "agent"
}
},
{ $unwind: "$agent"}
])



booking Table
{
"_id" : "AAAAA",
"property" : "001",
"user" : "U001",
"agent" : "A001",
"checkin" : 1493596800,
"checkout" : 1494374400,
"test" : "This one will always work"
}
{
"_id" : "BBBBB",
"property" : "001",
"user" : "U001",
"agent" : "",
"checkin" : 1493596800,
"checkout" : 1494374400,
"test" : "This one has blank agent and does not work"
}
{
"_id" : "CCCCC",
"property" : "001",
"user" : "U001",
"checkin" : 1493596800,
"checkout" : 1494374400,
"test" : "This one has no agent and does not work"
}
{
"_id" : "DDDDD",
"property" : "001",
"user" : "U001",
"agent" : "XXXX",
"checkin" : 1493596800,
"checkout" : 1494374400,
"test" : "This one has invalid agent and does not work"
}


users Table
{
"_id" : "U001",
"name" : "I am USER"
}
{
"_id" : "A001",
"name" : "I am AGENT"
}

最佳答案

当您将 $lookup 的结果通过管道传输到以查找结果数组所在的结果字段为目标的 $unwind 时,就会出现问题,查找操作的空结果将是由 unwind 丢弃,您的数据丢失发生的地方。回溯您的聚合逻辑并将 preserveNullAndEmptyArrays 选项添加到有罪的 $unwind 步骤。这将阻止该步骤中记录的丢失,从而解决您的问题。

关于mongodb - 在 MongoDB 中展开查找操作的结果时丢失记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43404864/

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