我花了很长时间寻找答案,但我确信我找不到合适的词来描述我所追求的东西。
基本上,我有一个名为'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"}}});
$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);
}
});
)
假设,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
null
我正在使用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文档不受影响。中的项目仍然为零。