当前位置: 首页 > 知识库问答 >
问题:

通过mongoose将项目推入mongo数组

郎河
2023-03-14

我花了很长时间寻找答案,但我确信我找不到合适的词来描述我所追求的东西。

基本上,我有一个名为'people'的mongodb集合,该集合的模式如下所示:

people: {
         name: String, 
         friends: [{firstName: String, lastName: String}]
        }

现在,我有了一个非常基本的express应用程序,它连接到数据库,并用一个空的friends数组成功地创建了'people'。

在应用程序的次要位置,一个表单就位,可以添加好友。该表单接受firstName和lastName,然后发布name字段,以引用适当的people对象。

我很难做的是创建一个新的friends对象,然后将它“推入”friends数组。

我知道,当我通过mongo控制台执行此操作时,我使用了更新函数,并将$push作为查找条件之后的第二个参数,但我似乎找不到让mongoose执行此操作的适当方法。

db.people.update({name: "John"}, {$push: {friends: {firstName: "Harry", lastName: "Potter"}}});

共有2个答案

卢知
2023-03-14

$push运算符将指定的值附加到数组。

{ $push: { <field1>: <value1>, ... } }

$push添加数组字段,并将该值作为其元素。

上面的答案满足了所有的要求,但是我通过做下面的操作得到了它

var objFriends = { fname:"fname",lname:"lname",surname:"surname" };
Friend.findOneAndUpdate(
   { _id: req.body.id }, 
   { $push: { friends: objFriends  } },
  function (error, success) {
        if (error) {
            console.log(error);
        } else {
            console.log(success);
        }
    });
)
宋英杰
2023-03-14

假设,var friend={firstname:'harry',lastname:'potter'};

您有两个选项:

更新内存中的模型,并保存(纯javascript array.push):

person.friends.push(friend);
person.save(done);

PersonModel.update(
    { _id: person._id }, 
    { $push: { friends: friend } },
    done
);

我总是尽可能地选择第一个选项,因为它更尊重mongoose给你的好处(钩子、验证等)。

但是,如果您正在进行大量并发写操作,您将遇到竞争条件,在竞争条件下,您将最终出现严重的版本错误,从而阻止您每次替换整个模型,并丢失您添加的前一个朋友。所以只有在绝对必要的时候才去前者。

 类似资料:
  • 问题内容: 我一直在寻找答案,但我确信我迷失了正确的词来描述我的追求。 基本上,我有一个名为“ people”的mongodb集合,该集合的架构如下: 现在,我有一个非常基本的express应用程序,该应用程序连接到数据库并成功地使用一个空的friends数组创建了“ people”。 在应用程序的次要位置,有一个添加好友的表单。该表单接受firstName和lastName,然后包含名称字段的P

  • 我正在使用mongoose将一个玩家推入mongoose中的玩家数组,当一个玩家加入游戏时。我收到以下错误:

  • 我想用相当复杂的方案更新文档。 我想用原子更新来做(而不是在内存中修改它,然后调用.save())。 }); ////////////////////////////////////////////////////////////// 我有事件id(_id)、会话(id)和需要添加/删除项到投票人数组。

  • 我使用Jongo查询mongodb。问题是,当我尝试将项添加到数组字段时,会出现这样的错误: HTTP状态500-请求处理失败;嵌套的异常是java。lang.IllegalArgumentException:{$addToSet:{bodyParameters:[{“first”:{“weight”:1.0,“height”:2.0,“腰围”:3.0,“肱二头肌”:4.0,“胸部”:5.0,“前

  • 我有一个NodeJS应用程序,其中我使用mongoose库与我的mongo数据库通信。 该应用程序是关于一个游戏,其中进行多个回合。并且每轮结束后,提交该轮的结果!我希望将值(一个json)推送到。我有一个和一个来确定推送的位置。 执行的位置: 它打印我没有错误,但db文档不受影响。中的项目仍然为零。