简体   繁体   中英

Push objects from array to mongoose array model field | MongoDB Mongoose

I am little confused how to push all objects from array to mongoose array field. Do I have to use loop?

I have created an inventory model where itemlist is an array of itemschema field

const itemlistSchema: mongoose.Schema = new Schema({
  item: {
    type: Schema.Types.ObjectId,
    ref: "Item",
    required: true,
  },
  quantity: {
    type: Number,
    required: true,
  },
});

const inventorySchema: mongoose.Schema = new Schema(
  {
    code: {
      type: String,
      trim: true,
      required: true,
      unique: true,
    },
    user: {
      type: Schema.Types.ObjectId,
      ref: "User",
      required: true,
    },
    shop: {
      type: Schema.Types.ObjectId,
      ref: "Shop",
      required: true,
      unique: true,
    },
    itemlist: [itemlistSchema],
  },
  { timestamps: true }
);

module.exports = retailMongoose.model(
  "Inventory",
  inventorySchema,
  "Inventory"
);

If I get an array from frontend or as input how can I update this inventory with items.

Suppose I get this array from frontend:

shop_id = "uniqueShopId"

items = [
{
item:"itemId",
quantity:20
},
{
item:"another itemID",
quantity:11
}
]

How can I push this to my inventory model. Every shop will have single inventory, so I can find inventory by shop_id.

Can any one help please? Thank you ❤️

I have created this solution which works for me.

 //add items to inventory.itemslist
    let itemsList = inventory.itemlist;
    // console.log("Db itemsList ==>", itemsList);

    //check if item already exists in inventory
    for (let i = 0; i < items.length; i++) {
      const item = items[i];
      // find item in inventory
      var itemInInventory = itemsList.findIndex(
        (anitemInInventory: any) =>
          //   console.log(anitemInInventory.item_id.toHexString(), item.item_id)
          anitemInInventory.item_id.toHexString() === item.item_id
      );
      //   console.log("itemInInventory ==>", itemInInventory);
    }

    console.log("Existing Item ==>", itemInInventory);
    if (itemInInventory > -1) {
      //send error if item already exists
      return res.throw_4906_ITEM_ALREADY_EXISTS(
        "Item already exists inside inventory. Cannot add again ,you can update it"
      );
    }
    items.forEach((item: any) => {
      if (!item.item_id || !item.quantity) {
        return res.throw_5005_INCOMPLETE_REQUIRED_FIELDS(
          "Adding items invalid config"
        );
      }

      itemsList.push({
        item_id: item.item_id,
        quantity: parseInt(item.quantity),
      });
    });
    inventory.itemlist = itemsList;
    await inventory.save();
    return res.throw_2101_INVENTORY_UPDATE_SUCCESS("Items added to inventory", {
      inventory,
    });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM