gpt4 book ai didi

$all 对面的 mongodb 查询

转载 作者:IT老高 更新时间:2023-10-28 13:17:17 26 4
gpt4 key购买 nike

我正在尝试学习 MongoDB,到目前为止它非常棒。但是我遇到了一种情况,我不太确定如何解决它。希望有人可以帮助我并提前致谢。

我想获取(整个)数组值在查询中的记录。例如:

记录 1:

{"name" : "Mango Shake", 
"ingredients" : [{"type" : "fruit", "name" : "mango"},
{"type" : "milk", "name" : "soy milk"}]}

记录 2:

{"name" : "Mango Banana Shake", 
"ingredients" : [{"type" : "fruit", "name" : "mango"},
{"type" : "milk", "name" : "soy milk"},
{"type" : "fruit", "name" : "banana"}]}

记录 3:

{"name" : "Milk Shake", 
"ingredients" : [{"type" : "milk", "name" : "soy milk"}]}

然后我会有一个类似的查询

{"ingredients" : {$all : [{"type" : "fruit", "name" : "mango"},
{"type" : "milk", "name" : "soy milk"},
{"type" : "fruit", "name" : "strawberry"}]}}

因为我有“芒果”“ bean 浆”“草莓”。所以我想知道我可以做哪些奶昔。显然这不会返回任何东西,因为查询不能有额外的东西。如果我使用 $in 那么一切都会返回,但我不能做芒果香蕉奶昔,因为我没有香蕉..

所以我只需要第一个和最后一个。任何想法?欣赏它:)

最佳答案

我想不出用 find 来做这件事的方法。但是你可以用 mapReduce .

您的 map 函数将迭代当前检查的文档的成分,并且仅在所有字段都是您拥有的成分时才发出它。您不需要为此使用 reduce 函数,因此发出的值的键应该是饮料文档的 _id。

当键是唯一的时,绝不应该调用 reduce 函数(reduce 函数用于确定当为同一个键发出多个值时会发生什么)。我不认为你可以省略 reduce 函数,所以你应该写一个只返回 values 数组的第一个元素的函数。

关于$all 对面的 mongodb 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12887579/

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