【发布时间】:2020-05-18 10:05:01
【问题描述】:
我正在尝试查找 type=conv 是否存在于给定的 rs 中,它存在于 d --> ds --> rs --> 类型中。
文档
{
"_id" : ObjectId("5ec25873bd796ff191e695b1"),
"c_name" : "c1",
"t_name" : "t1",
"d" : [
{
"name" : "d1",
"ds" : [
{
"name" : "ds1",
"rs" : [
{
"type" : "conv"
}
]
}
]
},
{
"name" : "d2",
"ds" : [
{
"name" : "ds2",
"rs" : []
}
]
}
]
}
查询:
filter = {
"$and": [
{"c_name": {'$eq': 'c1'}},
{"t_name": {'$eq': 't1'}},
{"d.name": {'$eq': 'd2'}},
{"d.ds.name": {'$eq': 'ds2'}},
{"d.ds.rs.type": {'$eq': 'conv'}}
]
}
输出
它正在返回我的文档,我猜它正在寻找 type = conv 在完整文档中的存在,即使它不存在于 ds2(d2 的一部分)上,但存在于 ds1(d1 的一部分)上。
我们是否有更简单的方法来查找它是否存在,我想先查找然后使用数组过滤器,我们可以更新深度嵌套数组中的特定元素。
有人可以建议我应该如何解决这个问题吗? (如果我们有任何不使用聚合的解决方案)
【问题讨论】:
-
您可以使用$ projection operator获取结果。
-
@prasad_ - 1. 投影不能用于多层嵌套数组。 2.问题主要是查找给定 d --> ds--> rs 的元素 type=conv 是否存在,它是根据我正在使用的过滤器找到它,因为 type 存在另一个 d-->ds
-
"1.投影不能用于多层嵌套数组。"可以使用。
-
您能否提供一个基于上述过滤器的示例,我可以尝试确认与您对齐吗?