mongodb 'findMany`,其中' id '以数组元素结尾

hfsqlsce  于 2022-11-03  发布在  Go
关注(0)|答案(2)|浏览(147)

我有一个字符串数组,这些字符串是文档ID的结尾部分

const arr = ['ace', 'acb', 'acc', 'aca'];
const documents = [
  { id: 'xxxxxxxace' },
  { id: 'xxxxxxxacb' },
  { id: 'xxxxxxxacc' },
  { id: 'xxxxxxxaca' }
];

我需要一个查询,它将返回ID以arr元素结尾的所有文档。
唯一的方法是对arr进行迭代,并对每个数组元素调用endsWithfindFirst
有更好的办法吗?

erhoui1w

erhoui1w1#

您可以尝试以下操作:

await prisma.documents.findMany({
  where: {
    OR: ['ace', 'acb', 'acc', 'aca'].map(element => ({
      id: {
        endsWith: element
      }
    }))
  }
});

我正在使用Postgres,不知道Prisma是否也在MongoDB上工作,但希望它能有所帮助!

uelo1irk

uelo1irk2#

使用$indexOfCP检查后缀是否位于id中,使用$map进行数组运算,最后使用$anyElementTrue返回匹配任何一种情况的单据。

db.collection.find({
  $expr: {
    "$anyElementTrue": {
      "$map": {
        // your input array
        "input": [
          "ace",
          "acb",
          "acc",
          "aca"
        ],
        "as": "suffix",
        "in": {
          $ne: [
            -1,
            {
              "$indexOfCP": [
                "$id",
                "$$suffix"
              ]
            }
          ]
        }
      }
    }
  }
})

Mongo Playground

相关问题