代码之家  ›  专栏  ›  技术社区  ›  Ilijanovic

不能在嵌套数组中使用$slice

  •  1
  • Ilijanovic  · 技术社区  · 3 年前

    我努力的是 $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] }
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   Steve Hand    3 年前

    你可以得到你想要的结果

    [
      {
        "_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
        ]
      }
    })
    

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