【问题标题】:Mongoose: insert object into a sub-document arrayMongoose:将对象插入子文档数组
【发布时间】:2021-01-10 06:34:48
【问题描述】:

我正在尝试将时间对象插入到特定用户的特定活动名称的时间数组中。例如,如果用户是“someuser”并且我想为吉他时间添加时间,我不确定该怎么做。

{
  username: "someuser",
  activities: [
    {
      name: "guitar",
      times: []
    },
    {
      name: "code",
      times: []
    }
  ]
}, {
  username: "anotheruser",
  activities: []
}

这是我目前拥有的功能,我无法弄清楚我做错了什么,任何帮助将不胜感激:

function appendActivityTime(user, activityName, newRange) {
  User.updateOne(
    {username: user, 'activities.name': activityName},
    { $push: {'activities.$.times': {newRange}},
    function (err) {
      if (err) {
          console.log(err);
        } else {
          console.log("Successfully added time range: " + newRange);
        }
    }}
  );
}

appendActivityTime("someuser", "guitar", rangeObject);

【问题讨论】:

    标签: javascript mongodb mongoose mongodb-query mongoose-schema


    【解决方案1】:

    如果您对更新嵌套文档没有信心,请让 mongoose 进行查询。

    let document = await Model.findOne ({ });

    document.activities = new_object;

    等待 document.save();

    【讨论】:

      【解决方案2】:

      我已经尝试过你的尝试,它对我有用:

      db.getCollection("test").updateOne(
        { username: "someuser", "activities.name": "guitar" },
        { $push: { "activities.$.times": { from: ISODate(), to: ISODate() } } } //Don't worry about ISODate() in node.js use date objects
      )
      

      结果:

      { 
          "_id" : ObjectId("5f6c384af49dcd4019982b2c"), 
          "username" : "someuser", 
          "activities" : [
              {
                  "name" : "guitar", 
                  "times" : [
                      {
                          "from" : ISODate("2020-09-24T06:15:03.578+0000"), 
                          "to" : ISODate("2020-09-24T06:15:03.578+0000")
                      }
                  ]
              }, 
              {
                  "name" : "code", 
                  "times" : [
      
                  ]
              }
          ]
      }
      

      我建议你改用arrayFilter,它们更精确,当你习惯它们时,它们变得非常方便

      【讨论】:

        猜你喜欢
        • 2016-12-09
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 2016-12-14
        • 2018-06-01
        • 2014-10-24
        • 2012-11-04
        • 1970-01-01
        相关资源
        最近更新 更多