当前位置: 首页 > 面试题库 >

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

微生智刚
2023-03-14
问题内容

我一直在寻找答案,但我确信我迷失了正确的词来描述我的追求。

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

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

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

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

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

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

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}});
};

问题答案:

假设, 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
);

我总是尽可能地尝试第一种选择,因为它会尊重猫鼬为您带来的更多好处(钩子,验证等)。

但是,如果您同时进行大量写入操作,则会遇到竞争状况,最终会导致讨厌的版本错误,从而使您无法每次更换整个模型并失去之前添加的朋友。因此,仅在绝对必要时才使用前者。



 类似资料:
  • 我花了很长时间寻找答案,但我确信我找不到合适的词来描述我所追求的东西。 基本上,我有一个名为'people'的mongodb集合,该集合的模式如下所示: 现在,我有了一个非常基本的express应用程序,它连接到数据库,并用一个空的friends数组成功地创建了'people'。 在应用程序的次要位置,一个表单就位,可以添加好友。该表单接受firstName和lastName,然后发布name字段

  • 我需要将一个数组中的对象推入数据库,但我得到了一个错误。我做错了什么?我发现这样一个话题,通过猫鼬将物品推入mongo数组却无法正确应用.............................................................. 当我尝试这个代码时,我得到了这个答案 MongooseError:文档在保存前必须有_ID

  • 使用下面的代码,我尝试创建一个新的项模式并将其推入第一个集合对象。我使用findById函数传递要更新的集合对象的_id。找到带有我的id的集合后,我只需将一个项模式推入集合对象的items数组。我得到Res.Status(200),但我的items数组从未更新。还有人有这个问题吗?谢谢你的帮助。

  • 问题内容: 是否有人使用过nodejs模块“ deferred”和“ mongoose”?我试图让deferred.promisify方法可以在猫鼬模型的函数上工作,以便我可以轻松地将它们链接起来,但是会遇到一些麻烦。具体来说,我想对和函数进行赋值处理,以便可以通过ObjectID链接查找另一个文档引用的一个文档。 这就是我所拥有的:https : //gist.github.com/332182

  • 我想在mongo数据库的数组中添加一个元素: 结果很完美: 更新:猫鼬模式: