Home > front end >  ts mongoose query specific string attribute as string array (not object array)
ts mongoose query specific string attribute as string array (not object array)

Time:11-12

I have this mongoose schema, and I want to query all IP attributes as a string array. like [IP,IP,IP,IP] this, not [ { ip : ip} ]

const proxyIpSchema = new Schema<IProxyIp>({
      ip: { 
        type: String,
        required: true,
        //ignore duplicate ip
        unique: true,
      },
      port: {
        type: Number,
        required: false,
        default: null
      },
      reason: {
        type: String,
        required: true,
        default: 'Unknown Detection.'
      }
    },
      {
        timestamps: true,
      }
    );

I cant use a map function because it will eat the backend processing power. like this I want all ips as a string array

//get all ips from mongo db and push to redis

await ProxyIp.find({}, { ip: 1 }).then(async (docs) => {

  docs.map(async (doc) => {
    await this.RedisClient?.sAdd(redisTable, doc.ip);
  });
  
}).catch((err) => {
});

CodePudding user response:

Here's one way you can put all the "ip"s into a single array (within an object).

db.ProxyIp.aggregate([
  {
    "$group": {
      "_id": null,
      "ips": {
        "$push": "$ip"
      }
    }
  },
  {
    "$unset": "_id"
  }
])

Example output:

[
  {
    "ips": [
      "102.118.108.76",
      "34.234.240.83",
      "123.76.73.33",
      "134.81.197.85",
      "193.122.45.195",
      "54.25.18.14",
      "185.68.124.193",
      "3.105.130.68",
      "52.72.204.78",
      "117.212.118.167",
      "199.155.140.226",
      "64.194.68.59",
      "57.4.147.57",
      "190.116.4.243",
      "179.111.74.98",
      ...
    ]
  }
[

Try it on mongoplayground.net.

  • Related