如果一个数组包含另一个数组的任何值,则 Mongoose 聚合匹配
Mongoose Aggregate match if an Array contains any value of another Array
我试图通过比较另一个数组的值内的值来匹配,如果第一个数组中的任何一个值与第二个数组的任何一个值匹配,则 return 它。我有这样的用户配置文件
{
"user": "bob"
"hobbies": [jogging]
},
{
"user": "bill"
"hobbies": [reading, drawing]
},
{
"user": "thomas"
"hobbies": [reading, cooking]
}
{
"user": "susan"
"hobbies": [coding, piano]
}
我的 mongoose 搜索查询示例是这个数组 [coding, reading](但可以包括任何爱好值),我想将其作为输出:
{
"user": "bill"
"hobbies": [reading, drawing]
},
{
"user": "thomas"
"hobbies": [reading, cooking]
}
{
"user": "susan"
"hobbies": [coding, piano]
}
我试过了:
{"$match": {"$expr": {"$in": [searchArray.toString(), "$hobbies"]}}}
但这只适用于搜索数组中只有一个值的情况。
const searchArray = ["reading", "coding"];
const orArray = searchArray.map((seachValue) => {
return {
hobies: searchValue,
}
});
collection.aggregate([{
$match: { $or: orArray }
}])
查询:
db.collection.aggregate([
{
$match: {
"$or": [
{
hobbies: "reading"
},
{
hobbies: "coding"
}
]
}
}
])
或者你可以使用其他方式,不需要处理arr:
db.collection.aggregate([
{
$match: {
hobbies: {
$in: [
"reading",
"coding"
]
}
}
}
])
我试图通过比较另一个数组的值内的值来匹配,如果第一个数组中的任何一个值与第二个数组的任何一个值匹配,则 return 它。我有这样的用户配置文件
{
"user": "bob"
"hobbies": [jogging]
},
{
"user": "bill"
"hobbies": [reading, drawing]
},
{
"user": "thomas"
"hobbies": [reading, cooking]
}
{
"user": "susan"
"hobbies": [coding, piano]
}
我的 mongoose 搜索查询示例是这个数组 [coding, reading](但可以包括任何爱好值),我想将其作为输出:
{
"user": "bill"
"hobbies": [reading, drawing]
},
{
"user": "thomas"
"hobbies": [reading, cooking]
}
{
"user": "susan"
"hobbies": [coding, piano]
}
我试过了:
{"$match": {"$expr": {"$in": [searchArray.toString(), "$hobbies"]}}}
但这只适用于搜索数组中只有一个值的情况。
const searchArray = ["reading", "coding"];
const orArray = searchArray.map((seachValue) => {
return {
hobies: searchValue,
}
});
collection.aggregate([{
$match: { $or: orArray }
}])
查询:
db.collection.aggregate([
{
$match: {
"$or": [
{
hobbies: "reading"
},
{
hobbies: "coding"
}
]
}
}
])
或者你可以使用其他方式,不需要处理arr:
db.collection.aggregate([
{
$match: {
hobbies: {
$in: [
"reading",
"coding"
]
}
}
}
])