通过猫鼬将项目推入mongo数组

我一直在寻找答案,但我确定我迷失了用正确的词来描述我所追求的目标。

基本上,我有一个名为“ people”的mongodb集合,该集合的架构如下:

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

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

在应用程序的次要位置,有一个添加好友的表单。该表单接受firstName和lastName,然后包含名称字段的POST,也用于引用适当的people对象。

我很难做的是创建一个新的朋友对象,然后将其“推送”到friends数组中。

我知道,当我通过mongo控制台执行此操作时,我会使用$ push的更新功能作为查找条件之后的第二个参数,但是我似乎找不到合适的方法来使猫鼬执行此操作。

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

更新: 因此,阿德里安的答案非常有帮助。以下是我为实现自己的目标所做的工作。

在我的app.js文件中,我使用

app.get('/addfriend', users.addFriend);

我的users.js文件中的哪里

exports.addFriend = function (req, res, next)
{
var friend = {"firstName": req.body.fName, "lastName": req.body.lName};
Users.findOneAndUpdate({name: req.user.name}, {$push: {friends: friend}});
};
伽罗西门小胖2020/03/26 16:52:38

$推操作者附加一个指定值的数组。

{ $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);
        }
    });
)
老丝2020/03/26 16:52:37

一种简单的方法是使用以下内容:

var John = people.findOne({name: "John"});
John.friends.push({firstName: "Harry", lastName: "Potter"});
John.save();