我正在尝试学习MongoDB,到目前为止它已经很棒了.但是我碰到了一个情况,我不太清楚如何解决它.希望有人可以帮助我,并提前感谢.
我想得到(整个)数组值在查询中的记录.例如:
记录1:
{"name" : "Mango Shake",
"ingredients" : [{"type" : "fruit", "name" : "mango"},
{"type" : "milk", "name" : "soy milk"}]}
Run Code Online (Sandbox Code Playgroud)
记录2:
{"name" : "Mango Banana Shake",
"ingredients" : [{"type" : "fruit", "name" : "mango"},
{"type" : "milk", "name" : "soy milk"},
{"type" : "fruit", "name" : "banana"}]}
Run Code Online (Sandbox Code Playgroud)
记录3:
{"name" : "Milk Shake",
"ingredients" : [{"type" : "milk", "name" : "soy milk"}]}
Run Code Online (Sandbox Code Playgroud)
然后我会有一个类似的查询
{"ingredients" : {$all : [{"type" : "fruit", "name" : "mango"},
{"type" : "milk", "name" : "soy milk"},
{"type" : "fruit", "name" : "strawberry"}]}}
Run Code Online (Sandbox Code Playgroud)
因为我有芒果,豆浆和草莓.所以我想知道我能做些什么.显然这不返回任何东西,因为查询不能有额外的东西.如果我使用$in那么所有人都将返回,但我不能做芒果香蕉奶昔,因为我没有香蕉..
所以我唯一需要的是第一个和最后一个.任何的想法?欣赏它:)
我想不出用 find 来做到这一点的方法。但你可以用mapReduce来做到这一点。
您的地图函数将迭代当前检查的文档的成分,并且仅当所有字段都是您拥有的成分时才发出它。您不需要为此使用reduce 函数,因此发出值的键应该是饮料文档的_id。
当键是唯一的时,永远不应该调用reduce函数(reduce函数用于确定为同一键发出多个值时会发生什么)。我不认为你可以忽略reduce函数,所以你应该编写一个只返回值数组的第一个元素的函数。
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |