如何在MongoDB中搜索数组的有序子集?

r1zhe5dt  于 2023-06-22  发布在  Go
关注(0)|答案(1)|浏览(158)

有鉴于此,三个MongoDB对象

{
    "_id" : 1,
    "array" : [ "a", "b", "c" ]
}
{
    "_id" : 2,
    "array" : [ "a", "b", "c" ]
}
{
    "_id" : 3,
    "array" : [ "x", "a", "b", "c" ]
}
{
    "_id" : 4,
    "array" : [ "x", "b", "c", "a" ]
}

我想用两种不同的方式搜索。
首先,我想找到数组以[“a”,“b”]开头的所有对象,它们应该是对象1,2,而不是3和4。
我想搜索数组中包含[“a”,“b”]的所有对象,顺序应该是1,2,3而不是4。
有什么想法,我如何搜索一个数组的子集,在该顺序,和/或开始在数组的开头?

eqzww0vc

eqzww0vc1#

要检查有序子集,您可以尝试以下操作:

db.collection.aggregate([
  {
    "$match": {
      $expr: {
        "$eq": [
          {
            "$filter": {
              "input": "$array",
              "as": "item",
              "cond": {
                "$in": [
                  "$$item",
                  [
                    "a",
                    "b"
                  ]
                ]
              }
            }
          },
          [
            "a",
            "b"
          ]
        ]
      }
    }
  }
])

在这个查询中,我们首先过滤数组,使其只包含子集中的元素,然后比较数组,看看它们是否有序。
Playground link.
要在开始时检查有序数组,请对数组进行切片,然后进行比较,如下所示:

db.collection.aggregate([
  {
    "$match": {
      $expr: {
        "$eq": [
          {
            "$slice": [
              "$array",
              2
            ]
          },
          [
            "a",
            "b"
          ]
        ]
      }
    }
  }
])

Playground link

相关问题