【问题标题】:cannot use $slice in nested array不能在嵌套数组中使用 $slice
【发布时间】:2021-11-17 06:55:49
【问题描述】:

我尝试的是 $slice 数组中的一个数组。

这是我尝试过的,但失败了。

db.collection.find({
  name: "admin",
  "datasets.name": "test"
},
{
  "datasets.$.datapoints": {
    $slice: [
      0,
      3
    ]
  }
})

输入数据示例

[
  {
    "name": "admin",
    "datasets": [
      {
        "name": "test",
        "datapoints": [
          1,
          6,
          4,
          3,
          8,
          5,
          3
        ],
        "_id": {
          "$oid": "619288f16733758444a28728"
        }
      },
      {
        "name": "more datasets",
        "datapoints": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8
        ],
        "_id": {
          "$oid": "619289086733758444a2872a"
        }
      }
    ]
  }
]

游乐场链接:

https://mongoplayground.net/p/pmGpk9jtqZ2

输出应该是:

{ name: "test", datapoints: [1,6,4] }

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    你可以得到你想要的结果

    [
      {
        "_id": ObjectId("5a934e000102030405000000"),
        "datasets": [
          {
            "_id": ObjectId("619288f16733758444a28728"),
            "datapoints": [
              1,
              6,
              4
            ],
            "name": "test"
          },
          {
            "_id": ObjectId("619289086733758444a2872a"),
            "datapoints": [
              1,
              2,
              3
            ],
            "name": "more datasets"
          }
        ],
        "name": "admin"
      }
    ]
    

    db.collection.find({
      name: "admin",
      "datasets.name": "test"
    },
    {
      "datasets.datapoints": {
        $slice: [
          0,
          3
        ]
      }
    })
    

    您只需要省略位置运算符。

    【讨论】:

    • 这不是我想要的。您有 2 个数据集,但我只需要搜索的 1 个
    • 当你在一个真正的 MDB 实例上运行它时,它应该正确地执行查找,只处理正确的文档。
    猜你喜欢
    • 2021-12-03
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2021-11-24
    • 2019-12-22
    • 2012-05-12
    • 2020-10-23
    相关资源
    最近更新 更多