首页 > 解决方案 > Mongoose 仅​​拉取数组内数组中的单个字符串

问题描述

我在猫鼬中有以下文件。而且我只想拉字符串而不是删除对象。

[{
  "_id": {
    "$oid": "6051e87aa8698c13fb4951fa"
  },
  "user": {
    "$oid": "6051e87aa8698c13fb4951f7"
  },
  "channelDetail": [
    {
      "hiddenchannels": [],
      "thingchannels": [],
      "_id": {
        "$oid": "6051e87aa8698c13fb4951fb"
      },
      "room": {
        "$oid": "6051e87aa8698c13fb4951f9"
      }
    },
    {
      "room": {
        "$oid": "60a8e3f685b8741eaef56e25"
      },
      "_id": {
        "$oid": "60e03c7076b5d3915dad1c3b"
      },
      "thingchannels": [
        {
          "$oid": "60e0158af5f1cf131bbb7be6"
        },
        {
          "$oid": "60e0158af5f1cf131bbb7be7"
        },
        {
          "$oid": "60e0158af5f1cf131bbb7be8"
        },
        {
          "$oid": "60e0158af5f1cf131bbb7be9"
        }
      ],
      "hiddenchannels": []
    },
    {
      "hiddenchannels": [],
      "thingchannels": [],
      "_id": {
        "$oid": "60e02c651b08eb18ac565770"
      },
      "room": {
        "$oid": "60e02c5c1b08eb18ac56576f"
      }
    }
  ],
  "__v": 13,
  "localUpdateAt": 1625306846846
}]

现在我想删除thingchannels数组中的单个字符串,但查询返回完整对象而不是删除字符串。

await this.roomUserDetail.updateMany(
        { "channelDetail.thingchannels": { $in: ["60e0158af5f1cf131bbb7be6"] } },
        {
          $pull: {
            channelDetail: {
              thingchannels: { $in: ["60e0158af5f1cf131bbb7be6"] },
            },
          },
        }
      );

有没有办法只删除字符串数组中的一个字符串?

标签: typescriptmongoose

解决方案


尝试以下,我也尝试过,工作正常。

await this.roomUserDetail.updateMany({ 
  "channelDetail.thingchannels": { 
    $in: [mongoose.Types.ObjectId("60e0158af5f1cf131bbb7be6")] 
  } 
},{
  $pull:{
    "channelDetail.$[].thingchannels":{
      $in:[mongoose.Types.ObjectId("60e0158af5f1cf131bbb7be6")]
    }
  }
})

查询运行后的输出:

{
    "user": {
        "$oid": "6051e87aa8698c13fb4951f7"
    },
    "channelDetail": [{
        "hiddenchannels": [],
        "thingchannels": [],
        "_id": {
            "$oid": "6051e87aa8698c13fb4951fb"
        },
        "room": {
            "$oid": "6051e87aa8698c13fb4951f9"
        }
    }, {
        "room": {
            "$oid": "60a8e3f685b8741eaef56e25"
        },
        "_id": {
            "$oid": "60e03c7076b5d3915dad1c3b"
        },
        "thingchannels": [{
            "$oid": "60e0158af5f1cf131bbb7be7"
        }, {
            "$oid": "60e0158af5f1cf131bbb7be8"
        }, {
            "$oid": "60e0158af5f1cf131bbb7be9"
        }],
        "hiddenchannels": []
    }, {
        "hiddenchannels": [],
        "thingchannels": [],
        "_id": {
            "$oid": "60e02c651b08eb18ac565770"
        },
        "room": {
            "$oid": "60e02c5c1b08eb18ac56576f"
        }
    }],
    "__v": 13,
    "localUpdateAt": 1625306846846
}

推荐阅读