我有一个叫做people的mongodb集合
其架构如下:
people: {
name: String,
friends: [{firstName: String, lastName: String}]
}
现在,我有一个非常基本的快速应用程序连接到数据库,并成功地创建“人”与一个空的朋友数组。
在应用程序的次要位置,有一个添加好友的表单。表单接收firstName和lastName,然后是带有名称字段的POSTs,同样用于引用适当的people对象。
我有一个困难的时间做的是创建一个新的朋友对象,然后“推”到朋友数组。
我知道当我通过mongo控制台这样做时,我使用$push作为查找标准后的第二个参数的更新函数,但我似乎找不到合适的方法让猫鼬这样做。
db.people.update({name: "John"}, {$push: {friends: {firstName: "Harry", lastName: "Potter"}}});
我也遇到过这个问题。我的解决办法是创建一个子模式。请参见下面的模型示例。
----人物模型
const mongoose = require('mongoose');
const SingleFriend = require('./SingleFriend');
const Schema = mongoose.Schema;
const productSchema = new Schema({
friends : [SingleFriend.schema]
});
module.exports = mongoose.model('Person', personSchema);
* * *重要:SingleFriend。Schema ->确保模式使用小写
——子图式
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const SingleFriendSchema = new Schema({
Name: String
});
module.exports = mongoose.model('SingleFriend', SingleFriendSchema);
$push操作符将指定的值附加到数组中。
{ $push: { <field1>: <value1>, ... } }
$push将数组字段的值添加为其元素。
上面的答案满足所有的要求,但我通过做以下工作
var objFriends = { fname:"fname",lname:"lname",surname:"surname" };
People.findOneAndUpdate(
{ _id: req.body.id },
{ $push: { friends: objFriends } },
function (error, success) {
if (error) {
console.log(error);
} else {
console.log(success);
}
});
)