mongodb - 匹配数组的精确项或仅精确数组项的组合_MongoDB
问题描述
假设我们有一个字符串数组。有一个用例必须完成。
let myArray = ['a', 'g', 'd', 'e']
let collections = [
{items:['a', 'b']}, ==> false
{items:['a', 'g']}, ==> true
{items:['d', 'f']}, ==> false
{items:['a', 'g', 'd', 'e']}, ==> true
{items:['a', 'g', 'd', 'e', 'o']}, ==> false
{items:['a', 'g','e']}, ==> true
{items:['g']}, ==> true
{items:['g', 'k']}, ==> false
]
我的目标:
- 仅与一项完全匹配。
- 匹配这些项目的唯一组合。
首先,我知道这个查询对于这个数组的每个项目来说都是非常昂贵的,因为我们有那个查询匹配的阶乘。
如果我们的数组中有 2 个元素,我们就有 2 个可能的查询。如果我们有4 个元素,我们就有4 * 3 * 2 * 1 个可能的查询。
我的第二个问题是:这相关吗?除了用例。
解决方案
您可以使用$setIsSubset轻松实现此目的
db.collection.aggregate([
{
$addFields: {
filteredCollections: {
$filter: {
input: "$collections",
as: "collection",
cond: {
$setIsSubset: [
["$$collection.items"],
["a", "g", "d", "e"]
]
}
}
}
}
},
{
$match: {
"filteredCollections.0": {$exists: true}
}
}
])
对于完全匹配,您可以使用$all与$setIsSubset
.
推荐阅读
- javascript - 单击外部时焦点输入不起作用然后使用按键焦点
- reactjs - 应用组件正在神奇地获取道具?
- react-native - 没有初始屏幕的反应导航堆栈导航?(从一个按钮)
- c# - 使用 StreamReader 的 Xamarin.Forms 的 System.ArgumentNullException
- mysql - php中的自定义累积总和
- swift - 如何在 Swift AV 播放器中添加预览缩略图
- android-studio - 如何修复 AAPT:错误:找不到资源 android:attr/fontVariationSettings?
- typescript - CompletionProvider 未显示在 VSCode 扩展中
- python - Google Cloud Storage 没有此类文件或目录错误
- c - 从文件中读取,C