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

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

我已经找了很好的答案,但我相信我迷失了正确的词语来描述我的目标。

基本上,我有一个名为“People”的MongoDB集合,该集合的模式如下所示:

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

现在,我有了一个非常基本的Express应用程序,它连接到数据库,并使用一个空的朋友数组成功地创建了“People”。

在应用程序的次要位置,有一个表单可以添加朋友。表单接受FirstName和LastName,然后使用name字段发布,并引用适当的People对象。

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

我知道,当我通过mongo控制台执行此操作时,我使用了UPDATE函数,并将$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}});};


茅侃侃
浏览 567回答 3
3回答

米琪卡哇伊

假设,var friend = { firstName: 'Harry', lastName: 'Potter' };有两种选择:更新内存中的模型并保存(普通javascript array.ush):person.friends.push(friend);person.save(done);或PersonModel.update(     { _id: person._id },      { $push: { friends: friend } },     done);我总是在可能的时候尝试第一种选择,因为它会尊重猫鼬给你带来的更多好处(钩子、验证等等)。然而,如果您正在进行大量并发写操作,您将遇到竞争条件,最终会出现严重的版本错误,从而阻止您每次替换整个模型,并失去您添加的前一个朋友。所以只有在绝对必要的时候才去前者。

饮歌长啸

这个$Push运算符将指定的值追加到数组中。{&nbsp;$push:&nbsp;{&nbsp;<field1>:&nbsp;<value1>,&nbsp;...&nbsp;}&nbsp;}$Push添加以值作为其元素的数组字段。上面的答案满足了所有的要求,但我做了以下工作var&nbsp;objFriends&nbsp;=&nbsp;{&nbsp;fname:"fname",lname:"lname",surname:"surname"&nbsp;};Friend.findOneAndUpdate( &nbsp;&nbsp;&nbsp;{&nbsp;_id:&nbsp;req.body.id&nbsp;},&nbsp; &nbsp;&nbsp;&nbsp;{&nbsp;$push:&nbsp;{&nbsp;friends:&nbsp;objFriends&nbsp;&nbsp;}&nbsp;}, &nbsp;&nbsp;function&nbsp;(error,&nbsp;success)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(error)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(error); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(success); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;});)
打开App,查看更多内容
随时随地看视频慕课网APP