我需要匹配所有文档,其中字段arr
是一个对象ID数组,与给定的元素相同,无论位置如何。
我试过:
[
{
$match:{
arr: givenArr
}
}
]
或
[
{
$match:{
arr: {
$in: givenArr
}
}
}
]
第一个管道匹配在same position
中具有相同元素的所有文档。
第二个管道匹配在给定数组中至少有一个元素的所有文档。
例如,如果我有几个文档,如:
[
{
_id: ObjectId("639a0e4cc0f6595d90a84de4"),
arr: [
ObjectId("639a0e4cc0f6595d90a84de1"),
ObjectId("639a0e4cc0f6595d90a84de2"),
ObjectId("639a0e4cc0f6595d90a84de3"),
]
},
{
_id: ObjectId("639a0e4cc0f6595d90a84de5"),
arr: [
ObjectId("639a0e4cc0f6595d90a84de7"),
ObjectId("639a0e4cc0f6595d90a84de8"),
ObjectId("639a0e4cc0f6595d90a84de9"),
]
},
]
如果我需要匹配所有arr
与
[
ObjectId("639a0e4cc0f6595d90a84de8"),
ObjectId("639a0e4cc0f6595d90a84de9"),
ObjectId("639a0e4cc0f6595d90a84de7"),
]
我只想拿第二份文件。
我怎么能这么做?
2条答案
按热度按时间ni65a41a1#
您可以将每个数组视为一个集合,并使用
"$setEquals"
。在mongoplayground.net上试试。
ne5o7dgx2#
您可以比较
$sortArray
计算的两个数组的排序结果Mongo Playground