如果一个数组包含另一个数组的任何值,则 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"
        ]
      }
    }
  }
])

Run here