Push items into mongo array via mongoose

前端 未结 8 1395
小鲜肉
小鲜肉 2020-11-22 03:22

I\'ve scoured SO a good bit looking for the answer but I\'m sure that I\'m lost for the right words to describe what I\'m after.

Basically I have a mongodb collection

8条回答
  •  梦毁少年i
    2020-11-22 04:24

    First I tried this code

    const peopleSchema = new mongoose.Schema({
      name: String,
      friends: [
        {
          firstName: String,
          lastName: String,
        },
      ],
    });
    const People = mongoose.model("person", peopleSchema);
    const first = new Note({
      name: "Yash Salvi",
      notes: [
        {
          firstName: "Johnny",
          lastName: "Johnson",
        },
      ],
    });
    first.save();
    const friendNew = {
      firstName: "Alice",
      lastName: "Parker",
    };
    People.findOneAndUpdate(
      { name: "Yash Salvi" },
      { $push: { friends: friendNew } },
      function (error, success) {
        if (error) {
          console.log(error);
        } else {
          console.log(success);
        }
      }
    );
    

    But I noticed that only first friend (i.e. Johhny Johnson) gets saved and the objective to push array element in existing array of "friends" doesn't seem to work as when I run the code , in database in only shows "First friend" and "friends" array has only one element ! So the simple solution is written below

    const peopleSchema = new mongoose.Schema({
      name: String,
      friends: [
        {
          firstName: String,
          lastName: String,
        },
      ],
    });
    const People = mongoose.model("person", peopleSchema);
    const first = new Note({
      name: "Yash Salvi",
      notes: [
        {
          firstName: "Johnny",
          lastName: "Johnson",
        },
      ],
    });
    first.save();
    const friendNew = {
      firstName: "Alice",
      lastName: "Parker",
    };
    People.findOneAndUpdate(
      { name: "Yash Salvi" },
      { $push: { friends: friendNew } },
      { upsert: true }
    );
    

    Adding "{ upsert: true }" solved problem in my case and once code is saved and I run it , I see that "friends" array now has 2 elements ! The upsert = true option creates the object if it doesn't exist. default is set to false.

    if it doesn't work use below snippet

    People.findOneAndUpdate(
      { name: "Yash Salvi" },
      { $push: { friends: friendNew } },
    ).exec();
    

提交回复
热议问题