MongoDB - 查询集合的数组包含输入数组中的所有元素
MongoDB - Query collection's array contains all element in input array
假设我有以下文件:
[
{
array : ['a', 'b' , 'c'],
},
{
array : ['b', 'd' , 'e'],
},
{
array : ['d', 'e' , 'f'],
},
]
查询输入数组:
["b","d","e","f"]
预期输出:
['b', 'd' , 'e'],['d', 'e' , 'f']
我可以使用哪个查询来做到这一点?
以及如何过滤哪些元素不在文档中?
预期结果:
[
{
array : ['b', 'd' , 'e'],
missingElement : ['f']
},
{
array : ['d', 'e' , 'f'],
missingElement : ['b']
},
]
$expr
- 允许使用聚合运算符。
1.1。 $eq
- 比较 1.1.1 和 1.1.2 的结果是否相等。
1.1.1。 $size
- 获取 array
字段的大小。
1.1.2。 $size
- 从结果中获取数组的大小 1.1.2.1.
1.1.2.1。 $setIntersection
- 将 array
字段和输入数组相交,return 数组中的相交值。
db.collection.find({
$expr: {
$eq: [
{
$size: "$array"
},
{
$size: {
$setIntersection: [
"$array",
[
"b",
"d",
"e",
"f"
]
]
}
}
]
}
})
已更新
对于查找缺失元素的聚合查询:
$match
- 过滤文档(如 $expr
的第一个答案中所述)。
$project
- 修饰输出文档。对于 missingElement
字段,需要 $filter
运算符来查找输入数组中不存在的每个值($not
和 $in
)在 array
.
db.collection.aggregate([
{
$match: {
$expr: {
$eq: [
{
$size: "$array"
},
{
$size: {
$setIntersection: [
"$array",
[
"b",
"d",
"e",
"f"
]
]
}
}
]
}
}
},
{
$project: {
array: 1,
missingElement: {
$filter: {
input: [
"b",
"d",
"e",
"f"
],
cond: {
$not: {
$in: [
"$$this",
"$array"
]
}
}
}
}
}
}
])
假设我有以下文件:
[
{
array : ['a', 'b' , 'c'],
},
{
array : ['b', 'd' , 'e'],
},
{
array : ['d', 'e' , 'f'],
},
]
查询输入数组:
["b","d","e","f"]
预期输出:
['b', 'd' , 'e'],['d', 'e' , 'f']
我可以使用哪个查询来做到这一点? 以及如何过滤哪些元素不在文档中?
预期结果:
[
{
array : ['b', 'd' , 'e'],
missingElement : ['f']
},
{
array : ['d', 'e' , 'f'],
missingElement : ['b']
},
]
$expr
- 允许使用聚合运算符。1.1。
$eq
- 比较 1.1.1 和 1.1.2 的结果是否相等。1.1.1。
$size
- 获取array
字段的大小。1.1.2。
$size
- 从结果中获取数组的大小 1.1.2.1.1.1.2.1。
$setIntersection
- 将array
字段和输入数组相交,return 数组中的相交值。
db.collection.find({
$expr: {
$eq: [
{
$size: "$array"
},
{
$size: {
$setIntersection: [
"$array",
[
"b",
"d",
"e",
"f"
]
]
}
}
]
}
})
已更新
对于查找缺失元素的聚合查询:
$match
- 过滤文档(如$expr
的第一个答案中所述)。$project
- 修饰输出文档。对于missingElement
字段,需要$filter
运算符来查找输入数组中不存在的每个值($not
和$in
)在array
.
db.collection.aggregate([
{
$match: {
$expr: {
$eq: [
{
$size: "$array"
},
{
$size: {
$setIntersection: [
"$array",
[
"b",
"d",
"e",
"f"
]
]
}
}
]
}
}
},
{
$project: {
array: 1,
missingElement: {
$filter: {
input: [
"b",
"d",
"e",
"f"
],
cond: {
$not: {
$in: [
"$$this",
"$array"
]
}
}
}
}
}
}
])